The Scheduler cannot be restarted after shutdown() has been called.

The Scheduler cannot be restarted after shutdown() has been called.

在这里插入图片描述
报错代码:

Exception in thread "Quartz Scheduler [schedulerFactoryBean]" org.springframework.scheduling.SchedulingException: Could not start Quartz Scheduler after delay; nested exception is org.quartz.SchedulerException: The Scheduler cannot be restarted after shutdown() has been called.
	at org.springframework.scheduling.quartz.SchedulerFactoryBean$1.run(SchedulerFactoryBean.java:754)
Caused by: org.quartz.SchedulerException: The Scheduler cannot be restarted after shutdown() has been called.
	at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:529)
	at org.quartz.impl.StdScheduler.start(StdScheduler.java:142)
	at org.springframework.scheduling.quartz.SchedulerFactoryBean$1.run(SchedulerFactoryBean.java:751)

报错原因无外乎就是Scheduler中的shutdown()和start()启动时出现冲突问题
我这出错的原因就是你延迟时间太长,shutdown()后又来start(),最后就变成那个线程没有了,你居然还去start()。于是bug大佬就提前出头了。

解决方法

@Bean
	public SchedulerFactoryBean schedulerFactoryBean() {
		SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
		schedulerFactoryBean.setJobFactory(jobFactory);
		// 用于quartz集群,QuartzScheduler 启动时更新己存在的Job
		schedulerFactoryBean.setOverwriteExistingJobs(true);
		// 延长启动
		schedulerFactoryBean.setStartupDelay(10);
		return schedulerFactoryBean;
	}

其中的

schedulerFactoryBean.setStartupDelay(10);

在做定时器的时候表示延迟启动。项目启动完成后,等待10秒后开始执行调度器初始化。
如果你在开发的时候使用热部署的情况下很容易出现上面的错。特别是延迟时间越长的情况下不停的启动服务会触发这个bug。
建议在开发的时候 延迟时间短点 或者别在短时间内重复启动服务

以上情况只供参考

如果是在是使用Scheduler的shutdown方法出错的时候,可以考虑standby()暂停方法。这样就不会出现shutdown后start()的问题,。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值