首页 > 其他分享 >@RefreshScope导致xxl-job jobhandler naming conflicts项目启动报错

@RefreshScope导致xxl-job jobhandler naming conflicts项目启动报错

时间:2024-05-06 23:00:59浏览次数:14  
标签:java jobhandler job 报错 RefreshScope XxxTask public xxl

问题

项目里使用xxl-job定时任务框架,某个任务定义如下:

@Slf4j
@RefreshScope
@Component
@JobHandler("xxxTask")
public class XxxTask extends IJobHandler {
    
    @Value("${xxx.enable:false}")
    private boolean enable;

    @Override
    public ReturnT<String> execute(String param) throws Exception {
        ...
    }
}

项目启动报错:

...
Caused by: java.lang.RuntimeException: xxl-job jobhandler naming conflicts.
	at com.xxl.job.core.executor.impl.XxlJobSpringExecutor.initJobHandlerRepository(XxlJobSpringExecutor.java:49)
	at com.xxl.job.core.executor.impl.XxlJobSpringExecutor.start(XxlJobSpringExecutor.java:25)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)

根据报错提示,存在jobhandler命名冲突;
检查项目里的所有@JobHandler标识的类,没有发现命名重复。

解决

项目在之前一直能启动成功,报这个错启动失败前,刚添加了该XxxTask类,
对比其它@JobHandlerXxxTask类使用了Spring的@Value注解和Spring-Cloud的@RefreshScope
期望通过配置中心的动态配置,XxxTask类能同步实时刷新。

尝试去掉@RefreshScope注解,发现启动项目成功。

xxl-job官方github里找到了相同的问题: https://github.com/xuxueli/xxl-job/issues/2010
@RefreshScopexxl-job生成Bean有冲突。

虽然去掉去掉@RefreshScope能让项目启动成功,但这样修改配置中心配置,XxxTask类不会动态刷新;

考虑一个折中的方案,将@Value动态配置属性放到一个单独的配置类中,如DynamicConfig

@Slf4j
@Getter
@Setter
@RefreshScope
@Configuration
public class DynamicConfig implements Serializable {

    @Value("${xxx.dynamic.enable:false}")
    private Integer enable;
    ...
}

然后把DynamicConfig类注入到XxxTask中:

@Slf4j
@RefreshScope
@Component
@JobHandler("xxxTask")
public class XxxTask extends IJobHandler {
    
    @Autowired
    private DynamicConfig dynamicConfig;
        
    @Override
    public ReturnT<String> execute(String param) throws Exception {
        ...
    }
}

当配置中心属性修改,DynamicConfigBean动态刷新后,XxxTask里的dynamicConfig同步刷新,使用它的属性即为最新值。

标签:java,jobhandler,job,报错,RefreshScope,XxxTask,public,xxl
From: https://www.cnblogs.com/cdfive2018/p/18174355

相关文章

  • SSH远程连接时报错提示Permission denied (publickey).的解决方法
    1.发现问题在Linux终端使用sshroot@server_ip来连接到远程服务器时,出现Permissiondenied(publickey).提示2.分析问题远程主机禁用了ssh密码登录权限本地访问远程主机的公钥没有添加或者被取消(无法认证)本地生成的一对秘钥,私钥~/.ssh/id_rsa和公钥~/.ssh/id_rsa.pub。......
  • jmap使用报错Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVM
    报错场景问题原因服务器上装了jdk,按理来说jmap是自带了的,可以直接使用,根据情况来看是装了jmap但是无法正常使用,推测是版本的问题导致解决方式指定jdk自带的jmap工具1.查看当前java的环境变量echo$JAVA_HOME2.配置jdk自带工具的环境变量exportPATH=$JAVA_HOME/bin:$P......
  • 解决报错:Could not set property 'id' of 'class com.north.domain.Book' with value
    报错原因问题描述:因为MyBatis-Plus默认的id自增策略使用的雪花算法org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.reflection.ReflectionException:Couldnotsetproperty'id'of'classcom.north.domain.Book'withvalue'1......
  • vue-i18n的9以上的版本中@被用作特殊字符处理,直接用会报错
    vue3项目中使用vue-i18n的9以上的版本实现国际化,使用过程中出现报错:国际化使用 "validation.regExp.name":"仅允许输入字母、数字与_.@字符"报如下错误 Messagecompilationerror:Invalidlinkedformat1|仅允许输入字母、数字与_.@字符Messagecompilationerror:Un......
  • Less17基于报错的字符型注入
    Less17基于报错的字符型注入打开环境是一个密码重置页面在用户名栏输入各种语句都无效,遂审计源码functioncheck_input($value) { if(!empty($value)) { //truncation(seecomments) $value=substr($value,0,15); } //Stripslashesifmagicquotesenabled......
  • Mac更新python3.12 解决pip3安装报错
    Mac使用homebrew更新了python3.12,删除了以前的版本和pip3安装软件时候报错。error:externally-managed-environment×Thisenvironmentisexternallymanaged╰─>ToinstallPythonpackagessystem-wide,trybrewinstallxyz,wherexyzisthepackageyouare......
  • 报错“ opensslErrorStack: [ 'error:03000086:digital envelope routines::initiali
    报错“ opensslErrorStack:['error:03000086:digitalenveloperoutines::initializationerror']”报错信息前端启动项目报错,报错信息如下:$yarnstartyarnrunv1.22.21$cross-envUMI_ENV=devumidevBrowserslist:caniuse-liteisoutdated.Pleaserun:npx......
  • 在Docker内部使用gdb调试器报错-Operation not permitted
    在docker内部使用gdb调试时刻遇到了gdb如下报错信息:warning:Errordisablingaddressspacerandomization:Operationnotpermitted原因地址随机化是linux一项安全特性,它允许内核进程启动每次加载库的时候都在随机化的分布在进程虚拟内存地址空间上(早期固定的库要加载......
  • [Git Error]error: Invalid path报错解决
    问题背景可能是在clone某仓库后出现形如下面报错$gitclonehttps://github.com/*.gitCloninginto'*'...remote:Enumeratingobjects:*,done.remote:Countingobjects:100%(*/*),done.remote:Compressingobjects:100%(*/*),done.remote:Total*(delta*),......
  • 【Netty】【XXL-JOB】时间轮的原理以及应用分析
    1 前言今天晚上看了一本70多页的讲解时间轮的PDF,从是什么为什么以及原理到源码中的应用分析,讲的真好。这节我就按我理解的思路捋一下,记录一下哈。2 时间轮概述2.1 时间轮是什么时间轮是一种高效利用线程资源进行批量化调度的一种调度模型。把大批量的调度任务全部绑......