quarzt启动 Unable to store Job : ‘DEFAULT.TASK_1‘, because one already exists with this identification

状况说明

springboot项目集成了 quarzt
本地测试一直没问题,发布上线后,一直启动不起来报错如下

2020-10-27 12:52:51 [main] ERROR o.s.b.SpringApplication:826 Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scheduleJobController': Unsatisfied dependency expressed through field 'scheduleJobService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scheduleJobService': Invocation of init method failed; nested exception is java.lang.RuntimeException: 创建定时任务失败

Caused by: java.lang.RuntimeException: 创建定时任务失败
	at com.mtons.liflag.web.job.utils.ScheduleUtils.createScheduleJob(ScheduleUtils.java:66)
	at com.mtons.liflag.web.job.service.impl.ScheduleJobServiceImpl.init(ScheduleJobServiceImpl.java:43)
	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.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
	... 61 common frames omitted
Caused by: org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'DEFAULT.TASK_1', because one already exists with this identification.
	at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1113)
	at org.quartz.impl.jdbcjobstore.JobStoreSupport$2.executeVoid(JobStoreSupport.java:1067)
	at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3780)
	at org.quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3778)
	at org.quartz.impl.jdbcjobstore.JobStoreCMT.executeInLock(JobStoreCMT.java:245)
	at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1063)
	at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:855)
	at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)
	at com.mtons.liflag.web.job.utils.ScheduleUtils.createScheduleJob(ScheduleUtils.java:59)
	... 69 common frames omitted

解决过程

百度一番说是spring加载了两次会遇到这个问题,然后我检查了一番新写的代码并没有引起重复加载的问题

实在信不过,我把代码回滚到修改之前,还是报错

基本确认不是代码问题

猜测是在更新代码的时候,没有正常停服务,导致表中产生了脏数据

解决方案

删除数据 qrtz_job_details 中的数据
正常而言,qrtz_triggers表中对qrtz_job_details有外键引用,所以直接是删除不掉的,而qrtz_cron_triggers表中又有对qrtz_triggers的外键引用.所以,要按照:以下顺序删除数据
qrtz_cron_triggers> qrtz_triggers> qrtz_job_details

执行三条sql后,项目正常启动

DELETE from qrtz_cron_triggers;
DELETE from qrtz_triggers;
DELETE from qrtz_job_details;
  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值