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中的使用(CronTriggerFactoryBean)
  • 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()));
		
	}
}
方式三:Quartz在Spring中的使用(SimpleTriggerBean)
  • applicationContext_quartz.xml
  <bean id="testTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
      <property name="jobDetail">
          <!-- see the example of method invoking job above -->
          <ref bean="testJobDetail" />
      </property>
      <property name="startDelay">
          <value>2000</value>
      </property>
      <property name="repeatInterval">
          <!-- 10s后重复执行 -->
          <value>10000</value>
      </property>
  </bean>
  
  <bean id="testJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
      <property name="targetObject">
          <ref bean="testJob" />
      </property>
      <property name="targetMethod">
          <value>test</value>          
      </property>
  </bean>
  <bean id="testJob" class="xxx.TestJob" singleton="true" >
  </bean>
 
 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
          <list>
           <ref bean="testTrigger" />
          </list>
      </property>
  </bean>
  • TestJob.java
public class TestJob {
	
	private static Logger log =  LoggerFactory.getLogger(TestJob.class);
	
	/*每10s执行一次*/
	public void test() {
		log.info("现在的时间是:" + new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()));
	}
	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值