Spring 使用定時器(調度器)

本文僅僅是介紹基本的配置方式,並不詳細介紹。 java

1. Spring內置定時器。

spring 4.x 中內置了一種定時器,用戶經過簡單的配置便可實現調度功能。 spring

  1. 在配置類上聲明啓用調度器
  2. @Configuration
    @EnableAsync
    @EnableScheduling
    public class AppConfig {
    }
  3. 在服務類中要進行調度的方法上進行配置。有兩種形式:以固定週期執行;類Linux cron 方式配置
  4. @Scheduled(initialDelay=1000, fixedRate=5000) public void doSomething() { // something that should execute periodically }

    @Scheduled(initialDelay=1000, fixedRate=5000)
    public void doSomething() {
        // something that should execute periodically
    } 

2。 使用Quartz。

使用該方式有兩種配置方式: spa

1. xml方式配置。 code

<!-- 定時發送郵件填寫timesheet通知-->
    <!-- 定義調用對象和調用對象的方法-->
    <bean id="projobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="scheduleService"/> 要進行調度的服務類
        </property>
        <property name="targetMethod">
            <value>scheduleSend</value>  服務類中要執行的方法
        </property>
    </bean>
    <!-- 定義觸發時間-->
    <bean id="timecardSendMail" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="projobtask"/>
        </property>
         <!--cron表達式-->
        <property name="cronExpression">
            <value>1 * * * * ?</value>
        </property>
    </bean>

    <!-- 總管理類 若是將lazy-init='false'那麼容器啓動就會執行調度程序-->
    <bean id="startQuertz" lazy-init="false" autowire="no"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">
            <list>
                <ref bean="timecardSendMail"/>
            </list>
        </property>
    </bean>



2. java方式配置;(示例爲spring中的使用方式)
@Bean
    public MethodInvokingJobDetailFactoryBean cronJob(ScheduleService scheduleService) {

        MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean();
        bean.setTargetObject(scheduleService);
        bean.setTargetMethod("scheduleSend");
        return bean;
    }

    @Bean
    public CronTriggerBean timeCardSendMail(MethodInvokingJobDetailFactoryBean cronJob) throws ParseException {
        CronTriggerBean bean = new CronTriggerBean();
        bean.setJobDetail(cronJob.getObject());
        bean.setCronExpression("1 * * * * ?");

        return bean;

    }

    @Bean
    public SchedulerFactoryBean startQuertz(CronTriggerBean timeCardSendMail) {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        bean.setTriggers(timeCardSendMail);
        bean.start();
        return bean;
    }
相關文章
相關標籤/搜索