spring 集成quartz:

xiaoxiao2025-02-15  16

Spring集成quartz配置思路:

 

    ·定义job: 有两种方式。方式一:Spring使用JobDetailBean类,继承QuartzJobBean,重写

                                                                protected void executeInternal(JobExecutionContext context)方法,

                                                                注入这个类和其依赖关系

                                                方式二:Spring使用MethodInvokingJobDetailFactoryBean,

                                                                任何一个普通类都可,

                                                                注入这个类,还有那个方法要定时

    ·将job放到触发器中,并定义什么时候触发

    ·将触发器加入触发列表,触发列表可以自动启动触发器 

 

举例(来源于Spring2.5的sample):

 

    1. schedulingContext-quartz.xml

 

<?xml version="1.0" encoding="gbk"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <!-- 第一种定义job的方式:定义一个job ListImagesQuartzJob --> <bean id="listImagesJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="samples.imagedb.scheduling.ListImagesQuartzJob"/> <!-- 列出这个job的依赖组件 --> <property name="jobDataAsMap"> <map> <entry key="imageDatabase" value-ref="imageDatabase"/> <entry key="mailSender" value-ref="mailSender"/> <entry key="mailFrom" value="${mail.from}"/> <entry key="mailTo" value="${mail.to}"/> </map> </property> </bean> <!-- 把上面的job加入到触发器 --> <bean id="listImagesTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="listImagesJobDetail"/> <property name="startDelay" value="10000"/><!--第一次执行在10秒后--> <property name="repeatInterval" value="10000"/><!--频度,每10秒执行一次--> </bean> <!-- 普通类配置,该类job会使用 --> <bean id="imageDatabase" class="samples.imagedb.DefaultImageDatabase"> <property name="dataSource" ref="dataSource"/> <property name="lobHandler" ref="${imageDatabase.lobHandler}"/> </bean> <!--第二种定义job的方法:对已有类的某个方法,定义一个job,让它定时执行--> <bean id="checkImagesJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="imageDatabase"/> <property name="targetMethod" value="checkImages"/> </bean> <!-- 把上面的job加入到触发器 --> <bean id="checkImagesTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="checkImagesJobDetail"/> <property name="cronExpression" value="0/5 * * * * ?"/><!--精确地控制任务的运行时间--> </bean> <!-- 将触发器加入触发列表,将自动启动job--> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="listImagesTrigger"/> <ref local="checkImagesTrigger"/> </list> </property> </bean> </beans>

 

  2. ListImagesQuartzJob.java

 

public class ListImagesQuartzJob extends QuartzJobBean { private final Log logger = LogFactory.getLog(getClass()); private ImageDatabase imageDatabase; private MailSender mailSender; private String mailFrom; private String mailTo; public void setImageDatabase(ImageDatabase imageDatabase) { this.imageDatabase = imageDatabase; } public void setMailSender(MailSender mailSender) { this.mailSender = mailSender; } public void setMailFrom(String mailFrom) { this.mailFrom = mailFrom; } public void setMailTo(String mailTo) { this.mailTo = mailTo; } protected void executeInternal(JobExecutionContext context) { //定义job内容 } }

 

   3. DefaultImageDatabase.java

 

  

public class DefaultImageDatabase { //其他方法 public void checkImages() { // job内容 } }

 

  cronExpression配置说明见http://yang7551735.iteye.com/blog/545397

 

相关资源:spring整合quartz两种方式以及spring自带定时任务使用
转载请注明原文地址: https://www.6miu.com/read-5024816.html

最新回复(0)