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

本文主要是介绍ElasticJob启动不了 Caused by:com.dangdang.ddframe.job.exception.JobConfigurationException: Job conflict,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解决当当ElasticJob启动不了问题

问题描述

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

java.lang.IllegalStateException: Failed to execute CommandLineRunnerat 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配置是否一致,如果两台服务不一致就会报冲突错误。

这篇关于ElasticJob启动不了 Caused by:com.dangdang.ddframe.job.exception.JobConfigurationException: Job conflict的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/425667

相关文章

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe