1. 程式人生 > >spring整合Quartz定時器

spring整合Quartz定時器

() void java類 info throws tex execute new protect

第一種:為普通java類中的某個方法配置跑批任務

1.定義要跑批的類和方法:

package com.xy.utils.quartz;

import org.joda.time.DateTime;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 測試定時器類

* @author javaw

*

*/

public class TestQuartz {

public static Logger logger = LoggerFactory.getLogger(TestQuartz.class);

public void TestMethod(){

logger.info("Auto Execute TestMethod start! Date={}" ,new DateTime().toString("YYYY-MM-DD HH:mm:ss" ));

logger.info("**********測試跑批類************");

logger.info("Auto Execute TestMethod end! Date={}" ,new DateTime().toString("YYYY-MM-DD HH:mm:ss" ));

}

}

2.配置Spring定時器讓quartz自動執行testMethod方法:

<!-- 實例化bean -->

<bean id= "testMethodQuartz" class ="com.xy.utils.quartz.TestQuartz"/>

<!-- 配置MethodInvokingJobDetailFactoryBean -->

<bean id= "testTaskMethod"

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="testMethodQuartz"/>

<property name="targetMethod" value="TestMethod"/>

<property name="concurrent" value="false"/>

</bean>

<!-- 配置定時表達式 -->

<bean id= "testTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >

<property name="jobDetail" ref="testTaskMethod" />

<!-- 每一分鐘執行一次 -->

<property name="cronExpression" value="0 0/1 * * * ?" />

</bean>

<!-- 配置調度工廠 -->

<bean id= "testSchedulerFactoryBean"

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers" >

<list>

<ref bean="testTaskTrigger" />

</list>

</property>

</bean>

3.寫測試方法進行調用(不用啟動tomcat):

public static void main(String[] args) {

SchedulerFactoryBean schedulerFactoryBean = (SchedulerFactoryBean) SpringUtilsFromClassPathXml.getBean( "testSchedulerFactoryBean");

  //啟動調度器

schedulerFactoryBean.start();

}

第二種:為繼承QuartzJobBean的java類配置跑批任務

1.寫java類繼承QuartzJobBean,重寫executeInternal 方法:

package com.xy.utils.quartz;

import org.joda.time.DateTime;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.scheduling.quartz.QuartzJobBean;

import org.springframework.scheduling.quartz.SchedulerFactoryBean;

/**

* 測試繼承QuartzJobBean的java類配置定時器

* @author javaw

*

*/

public class TestQuartzExtendsJobBean extends QuartzJobBean{

private static Logger logger = LoggerFactory.getLogger(TestQuartzExtendsJobBean. class);

@Override

protected void executeInternal(JobExecutionContext context)

throws JobExecutionException {

logger.info("Auto Execute TestQuartzExtendsJobBean start! Date={}",new DateTime().toString( "YYYY-MM-DD HH:mm:ss"));

logger.info("**********"+content.getMergedJobDataMap().get("descString")+"************");

logger.info("Auto Execute TestQuartzExtendsJobBean end! Date={}",new DateTime().toString( "YYYY-MM-DD HH:mm:ss"));

}

}

2.配置文件:

<!--

第二種:為繼承Quartz的java類實現跑批

**********1.JobDetailBean

**********2.CronTriggerBean

**********3.SchedulerFactoryBean

-->

<bean id= "testJobDetailBean"

class="org.springframework.scheduling.quartz.JobDetailBean">

<property name="name" value="exampleJob" />

<property name="jobClass"

value="com.xy.utils.quartz.TestQuartzExtendsJobBean"/>

<!-- 可以封裝各種數據到JobExecutionContext裏 -->

<property name="jobDataAsMap">

<map>

<entry key="descString" value="測試跑批"/>

</map>

</property>

</bean >

<bean id= "testTaskTrigger"

class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail" ref="testJobDetailBean" />

<property name="cronExpression" value="0 0/1 * * * ?" />

</bean>

<bean id= "testSchedulerFactoryBean"

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers" >

<list>

<ref bean="testTaskTrigger" />

</list>

</property>

</bean>

spring整合Quartz定時器