本文仅仅是介绍基本的配置方式,并不详细介绍。
1. Spring内置定时器。
spring 4.x 中内置了一种定时器,用户通过简单的配置即可实现调度功能。
- 在配置类上声明启用调度器
-
@Configuration @EnableAsync @EnableScheduling public class AppConfig { }
- 在服务类中要进行调度的方法上进行配置。有两种形式:以固定周期执行;类Linux cron 方式配置
-
@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>
@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;
}