Based on configured schedule, the given trigger ‘DEFAULT.taskOfficeJob‘ will never fire

文章描述了一个使用Quartz调度的任务由于配置了无效的Cron表达式(针对2020年的日期)导致任务永远不会执行的问题。在2023年的当前时间,这个基于2020年的设定使得任务无法启动。解决方案是重新设置一个合法的触发时间。在SpringBoot应用程序启动时,由于这个错误,bean初始化失败并抛出异常。

先上执行截图,定时任务本地启动失败,控制台报错

Based on configured schedule, the given trigger 'DEFAULT.taskOfficeJob' will never fire

翻译一下:

被quartz调度的某个任务通过cron表达式配置了不合法或过去的时间;该job永远不会被执行到!

解释一下:

   taskOfficeJob.cron=0 20 16 20,23,25,26 * ? 2020

      例如想在2020年20号,23号,25号,26号当天16点20分执行任务

      现在是北京时间2023年而设置2020将永远执行不了!

解决方案:

       重新设置合法的触发时间!

 Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler#39': Invocation of init method failed; nested exception is com.dangdang.ddframe.job.exception.JobSystemException: org.quartz.SchedulerException: Based on configured schedule, the given trigger 'DEFAULT.taskOfficeJob' will never fire.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
    at com.cnpc.dj.MicroserviceTaskSchedulingApplication.main(MicroserviceTaskSchedulingApplication.java:20)
Caused by: com.dangdang.ddframe.job.exception.JobSystemException: org.quartz.SchedulerException: Based on configured schedule, the given trigger 'DEFAULT.taskOfficeJob' will never fire.
    at com.dangdang.ddframe.job.lite.internal.schedule.JobScheduleController.scheduleJob(JobScheduleController.java:57)
    at com.dangdang.ddframe.job.lite.api.JobScheduler.init(JobScheduler.java:111)
    at sun.reflect.GeneratedMethodAccessor113.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1758)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1695)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
    ... 16 common frames omitted

Spring框架中使用Quartz调度器时,如果出现“`Scheduler Context initialization failed`”或“`BeanCreationException`”,通常表明在调度器的初始化过程中发生了配置错误或资源不可用的问题。此外,“触发器永远不会触发”的现象可能与调度器未正确启动、任务未正确绑定触发器或线程池配置不当有关。 以下是对这些问题的分析和解决方案: ### 1. 检查 Quartz Bean 配置 确保 `JobDetail` 和 `Trigger` 正确地定义并绑定到调度器中。例如,若使用 XML 配置,需确认如下内容: - `JobDetailFactoryBean` 是否正确指定了 `jobClass`。 - `CronTriggerFactoryBean` 或 `SimpleTriggerFactoryBean` 是否设置了正确的调度时间表达式。 - 调度器是否通过 `SchedulerFactoryBean` 正确加载了所有作业和触发器。 示例 Java 配置代码如下: ```java @Bean public JobDetail jobDetail() { return JobBuilder.newJob(JobCreateOne2.class).withIdentity("jobCreateOne2").storeDurably().build(); } @Bean public Trigger trigger(JobDetail jobDetail) { return TriggerBuilder.newTrigger() .forJob(jobDetail) .withIdentity("triggerOne2") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever()) .build(); } ``` ### 2. 确保调度器正常启动 检查 `SchedulerFactoryBean` 的配置是否启用自动启动,并且调度器未被手动关闭: ```java @Bean public SchedulerFactoryBean schedulerFactory(ApplicationContext applicationContext) { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setJobFactory(new SpringBeanJobFactory(applicationContext.getAutowireCapableBeanFactory())); factory.setAutoStartup(true); return factory; } ``` 若调度器未自动启动,将导致触发器无法执行[^1]。 ### 3. 处理 BeanCreationException `BeanCreationException` 通常由依赖注入失败引起。检查以下方面: - `Job` 类是否标注为 `@Component` 或 `@Service`,以便 Spring 可以管理其实例。 - 是否正确使用 `SpringBeanJobFactory` 来支持依赖注入。 - 日志中是否有更详细的异常堆栈信息,定位具体出错的类或方法。 ### 4. 线程池配置问题 Quartz 默认使用的线程池大小可能不足以处理多个任务。可以在 `application.properties` 或 XML 中调整线程池大小: ```properties org.quartz.threadPool.threadCount=5 ``` 若线程池太小,可能导致任务排队甚至无法执行。 ### 5. 检查 Cron 表达式或调度时间设置 若使用的是 `CronTrigger`,请确保表达式格式正确。例如,每 10 秒执行一次应为: ``` "0/10 * * * * ?" ``` 若表达式有误,可能导致触发器从未被触发。 ### 6. 日志排查 查看日志文件中是否包含类似以下信息: ``` ERROR org.springframework.scheduling.quartz.SchedulerFactoryBean - Initializing Quartz Scheduler failed ``` 这通常表示调度器初始化失败的具体原因,如数据库连接失败、锁机制异常等。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@百思不如奇解

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值