Spring 使用定时器(调度器)

本文仅仅是介绍基本的配置方式,并不详细介绍。

1. Spring内置定时器。

spring 4.x 中内置了一种定时器,用户通过简单的配置即可实现调度功能。

  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。

使用该方式有两种配置方式:

1. xml方式配置。

<!-- 定时发送邮件填写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;
    }





你可能感兴趣的:(Spring 使用定时器(调度器))