使用Spring + quartz集群持久化时注意事项
2015-10-02 00:45
691 查看
1、持久化时未序列化异常
java.io.NotSerializableException: Unable to serialize JobDataMap for insertion into database because the value of property 'methodInvoker' is not serializable: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
例如:
原因请看org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
所以对于持久化的job需要自己继承org.springframework.scheduling.quartz.QuartzJobBean,同时修改JobDetailFactoryBean为
2.持久化时jobDetail找不到
原因一般是数据源配置导致的问题。
可能的原因是:数据源未配置成自动提交,当第一次启动trigger时,之前对数据库的job的增加的事物没有自动提交,导致后面的事物无法查询到。
如果数据源是通过dbcp配置的将自动提交配置为true
java.io.NotSerializableException: Unable to serialize JobDataMap for insertion into database because the value of property 'methodInvoker' is not serializable: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
例如:
<bean id="studyDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="studyJob" /> </property> <property name="targetMethod"> <value>doSth</value> </property> </bean>
原因请看org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
NOTE: JobDetails created via this FactoryBean are not serializable and thus not suitable for persistent job stores. You need to implement your own Quartz Job as a thin wrapper for each case where you want a persistent job to delegate to a specific service method. Compatible with Quartz 1.5+ as well as Quartz 2.0-2.2, as of Spring 3.2.
所以对于持久化的job需要自己继承org.springframework.scheduling.quartz.QuartzJobBean,同时修改JobDetailFactoryBean为
<bean id="studyDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass"> <value>com.joshua.job.StudyJob</value> </property> <property name="name" value="studyDetail"></property> <property name="durability" value="true" /> </bean>
2.持久化时jobDetail找不到
org.quartz.JobPersistenceException: The job (DEFAULT.studyDetail) referenced by the trigger does not exist.
原因一般是数据源配置导致的问题。
可能的原因是:数据源未配置成自动提交,当第一次启动trigger时,之前对数据库的job的增加的事物没有自动提交,导致后面的事物无法查询到。
如果数据源是通过dbcp配置的将自动提交配置为true
<property name="defaultAutoCommit" value="false" />如果是c3p0配置为autoCommitOnClose=true
相关文章推荐
- java篇 【10】类设计分析
- JAVA_SE基础——35.static修饰成员函数
- j2ee开发环境的建立(按需更新)
- Think in Java笔记——Java与对象
- Java多线程爬虫实现
- hadoop eclipse工程构建
- 003 All Primitives In Java
- Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查
- Java正则表达式过滤汉字
- Java正则表达式过滤汉字
- Java正则表达式过滤汉字
- 配置jdk相关的记录
- Java核心技术第3章(8)
- 重温经典之排序 java实现
- 找数组中出现超过一半的数 JAVA
- 如何给我们的eclipse新建文件自动生成注释
- Eclipse中设置代码缩进为空格缩进
- Java 8 Lambda实现原理分析
- Java 常见异常及趣味解释
- javaCode的数组和内存图解