1. 程式人生 > >Quartz的使用、Quartz在Spring中的使用

Quartz的使用、Quartz在Spring中的使用

需求:每天凌晨一點執行某個操作

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()));

    }
}