quartz教程:quartz2.0与Spring3.1的整合

Spring对Quartz中的各个组件:JobDetail,Trigger,Scheduler等提供了一层Bean-Style的封装,在Spring中使用Quartz,我们基本只需要实现自己的Job,之后在配置文件中配置JobDetail,Trigger,Scheduler即可,不需要做其它的事情,非常方便。至于涉及到Job的持久化问题时,由于在Spring中配置DataSource更容易,也简化了相关的工作。

本来将quartz整合到spring只是一个小问题,但是因为版本的支持问题,搞出了一些难以理解的错误。

一开始采用spring3.0和最新的quartz2.1.7,却出现了这么一个错误,不想重现了,大致就是“QRTZ_LOCKS表中缺少TRIGGER_ACCESS的lock值”,一开始google一下还是有很多人遇到,了解了一下以后,知道是spring3.0版本不支持此quartz版本,网上很多说是spring只支持quartz1.8.x,这对不对呢?以前是对的,但其实spring现在已经能支持quartz2.0了,看spring的changelog就可以知道,至少在spring3.1 RC2中已经支持quartz2.0了,但没保证对更高版本的完全支持。

所以,这里我采用spring3.1+quartz2.0.2,采用“spring高级程序设计”中的方法,配置:

<beanid=“job”class=“org.springframework.scheduling.quartz.JobDetailBean”>

       <propertyname=“jobClass”>

           <value>cn.ds.vertical.core.service.mail.SimpleJob</value>

       </property>

       <propertyname=“jobDataAsMap”>

           <map>

              <entrykey=“message”value=“mail sender!”/>

           </map>

       </property>

    </bean>

    <beanid=“trigger”class=“org.springframework.scheduling.quartz.SimpleTriggerBean”>

       <propertyname=“jobDetail”ref=“job”/>

       <propertyname=“startDelay”value=“1000″/>

       <propertyname=“repeatInterval”value=“3000″/>

    </bean>

    <beanid=“qrtz_datasource”class=“org.springframework.jdbc.datasource.SingleConnectionDataSource”>

       <propertyname=“driverClassName”value=“com.mysql.jdbc.Driver”/>

       <propertyname=“url”value=“jdbc:mysql://localhost:3306/quartz”/>

       <propertyname=“username”value=“root”/>

       <propertyname=“password”value=“123456″/>

    </bean>

    <beanid=“schedulerFactory”class=“org.springframework.scheduling.quartz.SchedulerFactoryBean”>

       <propertyname=“triggers”>

           <list>

              <reflocal=“trigger”/>

           </list>

       </property>

       <propertyname=“dataSource”>

           <reflocal=“qrtz_datasource”/>

       </property>

    </bean>

运行一下你就可以看到以下错误:

java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.JobDetailBean has interface org.quartz.JobDetail as super class

这是因为Spring为了支持quartz2.0的版本,更新了相应的API,只需将JobDetailBean和SimpleTriggerBean改成JobDetailFactoryBean和SimpleTriggerFactoryBean即可,如果使用cron也是一样,只需改成对应的*FactoryBean

 

如果未说明,本Blog中文章皆为原创文章,请尊重他人劳动,转载请注明: 转载自jmatrix

本文链接地址: quartz教程:quartz2.0与Spring3.1的整合

(注:一般引用了,我都会添加引用,如果有侵权的请联系我)



This entry was posted in Java and tagged , . Bookmark the permalink. Follow any comments here with the RSS feed for this post. Trackbacks are closed, but you can post a comment.