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

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/cblstc/article/details/81839088

需求:每天凌晨一点执行某个操作

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

    }
}

猜你喜欢

转载自blog.csdn.net/cblstc/article/details/81839088