ElasticJob启动不了 Caused by:com.dangdang.ddframe.job.exception.JobConfigurationException: Job conflict

解决当当ElasticJob启动不了问题

问题描述

分布式任务只能启动一个服务,启动第二个服务时会报错失败,报错如下

java.lang.IllegalStateException: Failed to execute CommandLineRunner
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:765)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:319)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)
	at com.ScheduleApplication.main(ScheduleApplication.java:34)
	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)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: com.dangdang.ddframe.job.exception.JobConfigurationException: Job conflict with register center. The job '课程销售统计任务' in register center's class is 'com.job.ClassSellStatisticsJob$$EnhancerBySpringCGLIB$$27d6e9fe', your job class is 'com.job.ClassSellStatisticsJob$$EnhancerBySpringCGLIB$$38c60534'
	at com.dangdang.ddframe.job.lite.internal.config.ConfigurationService.checkConflictJob(ConfigurationService.java:79)
	at com.dangdang.ddframe.job.lite.internal.config.ConfigurationService.persist(ConfigurationService.java:70)
	at com.dangdang.ddframe.job.lite.internal.schedule.SchedulerFacade.updateJobConfiguration(SchedulerFacade.java:103)
	at com.dangdang.ddframe.job.lite.api.JobScheduler.init(JobScheduler.java:105)
	at com.config.SimpleJobLoader.initJob(SimpleJobLoader.java:91)
	at com.config.SimpleJobLoader.run(SimpleJobLoader.java:58)
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:781)
	... 13 common frames omitted

从报错Job conflict with register center. 可以看出是启动第二个服务时有一个任务在zookeeper注册冲突了,但是其他任务没有冲突,为什么只有这个任务冲突,之前的关注点都在任务的名称上面,但是这次的的关注点在class的全类名com.job.ClassSellStatisticsJob$$EnhancerBySpringCGLIB$$27d6e9fe上,分析如下。

查看该job在zk上的注册信息:
该job的zk注册信息
查看正常任务的zk注册信息:
在这里插入图片描述
对比看出一个是增强类一个正常类:
报错job的jobClass是com.job.ClassSellStatisticsJob$$EnhancerBySpringCGLIB$$27d6e9fe 该类为增强类,为什么是代理增强类因为该类的方法中使用了@Transactional注解,然后spring对该类进行了进行了代理。每启动一个进程这个代理的类路径是不一样的因为后面应该拼接的是内存地址,所以这就解释了为什么启动第二个服务报错的问题。
在这里插入图片描述

解决方法

将该事务逻辑使用编程式事务或将该注解放到service上,就不会被spirng代理增强了,如下
在这里插入图片描述修改完后再看zk上的注册信息就是正常的全类名了
在这里插入图片描述

总结

当当的ElasticJob在启动注册的时候也会校验jobClass配置是否一致,如果两台服务不一致就会报冲突错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值