问题描述
Caused by: Java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
解决方法
如上问题,一般是由于spring 3.x 和 quartz 2.X版本不兼容导致,具体原因是org.quartz.CronTrigger在2.0以后从class变成了一个接口导致,坑啊,所以说前期设计架构一定要搞好啊。
trigger 用 org.springframework.scheduling.quartz.CronTriggerFactoryBean1
2
3
4
5
6
7<!-- 基于Cron表达式的打火器 -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<!-- 每分钟执行一次 -->
<property name="cronExpression" value="*/30 * * * * ?" />
</bean>
上述问题还有可能存在于Tomcat版本不兼容的问题上,比如tomcat-7.0.16中发现会有上述的问题。
问题描述
Caused by: java.io.IOException: JobDataMap values must be Strings when the ‘useProperties’ property is set. Key of offending value: methodInvoker
解决方法
如下:1
2
问题描述
不能通过依赖注入的方式直接获取bean实例
解决方法
- 在Job中通过预先注入好的实例,ApplicationContext.getBean(“xxx”)获取。
- 重写 JobBeanFactory,通过配置SchedulerFactoryBean来指定自定义的FactoryBean,如下:
1 | <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> |
1 | import org.quartz.spi.TriggerFiredBundle; |