Quartz的使用、Quartz在Spring中的使用
阿新 • • 發佈:2018-11-07
需求:每天凌晨一點執行某個操作
Quartz的使用
- 建立scheduler,並開始scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
- 建立jobDetail,需要同時提供需要執行的類,這裡時TestJob.class
JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
.withIdentity("jobDetail1", "group1" )
.build();
- TestJob.java需要實現Job介面
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("Now is " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
- 建立trigger
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2018-8-19 1:00:00");
} catch (ParseException e) {
e.printStackTrace();
}
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startAt(date) // 設定開始時間:2018-8-19 1:00:00
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInHours(24) // 每隔24小時執行一次
.repeatForever()) // 永遠執行
.build();
- schedulerJob?
scheduler.scheduleJob(jobDetail, trigger);
Quartz在Spring中的使用
- applicationContext_quartz.xml
<!-- 同步觸發器的配置開始 -->
<bean id="testJob" class="xxx.TestJob"></bean>
<!-- scheduler -->
<bean name="testSchedule" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger" />
</list>
</property>
</bean>
<!-- trigger -->
<bean id="testTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="testJobDetail" />
</property>
<property name="cronExpression">
<!-- 測試:每一秒執行一次 -->
<!-- <value>0/1 * * * * ?</value> -->
<!-- 設定每天早上一點執行 -->
<value>0 0 1 * * ?</value>
</property>
</bean>
<!-- jobDetail -->
<bean id="testJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="testJob" />
</property>
<property name="targetMethod">
<!-- 自動執行的方法 -->
<value>autoExecute</value>
</property>
<property name="concurrent" value="false"/>
</bean>
<!-- job的配置結束 -->
- TestJob.java
public class TestJob {
private static Logger log = LoggerFactory.getLogger(TestJob.class);
/**
* 每天凌晨1點
* 自動執行方法
*/
public void autoExecute() {
log.info("現在的時間是:" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()));
}
}