首页 > 编程语言 > 详细

quartz结合spring 使用定时任务与间隔任务

时间:2021-01-08 18:25:11      阅读:33      评论:0      收藏:0      [点我收藏+]

导入依赖

   <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz-jobs</artifactId>
        <version>2.3.0</version>
    </dependency>
    <!--spring依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.0.8.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

配置文件配置定时任务

自定义要定时执行的方法

  import org.springframework.stereotype.Component;
  import java.text.SimpleDateFormat;
  import java.util.Date;

  @Component
  public class MyJob {

      private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      public void abc(){
          System.out.println(Thread.currentThread()+ ":" + sdf.format(new Date()));
      }
  }

spring配置加载任务

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd                                       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

      <!--  注册任务类到spring容器  -->
      <context:component-scan base-package="com.demo.job"/>
      <!--  任务策略  -->
      <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
          <!--spring中注册的任务对象-->
          <property name="targetObject" ref="myJob "/>
          <!--任务对象中要执行哪个方法-->
          <property name="targetMethod" value="abc"/>
          <!--   并发 concurrent=false 单线程
             true: 在规定的周期内任务没完成时,又触发新的任务,属于同一任务时。使用多线程来处理任务
           -->
          <property name="concurrent" value="true"/>
      </bean>
      <!--  触发器 绑定回调 -->
      <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
          <!--  cron表达式: 秒 分 时 日 月 周 年(省略)     -->
          <!--  两秒触发一次  -->
          <property name="cronExpression" value="0/2 * * * * ?"/>
          <property name="jobDetail" ref="jobDetail"/>
      </bean>
      <!--  调度容器 时机到时触发触发器  -->
      <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
          <property name="triggers">
              <list>
                  <!--可装载多个触发器-->
                  <ref bean="trigger"/>
              </list>
          </property>
      </bean>
  </beans>

加载spring启动定时任务

  public class JobApplication {
      public static void main(String[] args) throws IOException {
          new ClassPathXmlApplicationContext("classpath:applicationContext-jobs.xml");
          // 阻塞
          System.in.read();
      }
  }

注解配置间隔任务

自定义任务类,需要执行的方法使用@Scheduled注解修饰

  @Component
  public class MyJob2 {

      private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      /**
       * initialDelay: 启动时延迟多少毫秒后才执行
       * fixedDelay: 每间隔多长时间执行
       */
      @Scheduled(initialDelay = 1000,fixedDelay = 2000)
      //@Scheduled(cron = "0/2 * * * * ?")
      public void tt(){
          System.out.println("job2:" + sdf.format(new Date()));
      }
  }

spring配置加载任务

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:context="http://www.springframework.org/schema/context"
         xmlns:task="http://www.springframework.org/schema/task"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task             http://www.springframework.org/schema/task/spring-task.xsd">

      <!--  注册任务类到spring容器  -->
      <context:component-scan base-package="com.demo.job"/>
      <!--注解支持:使用的约束是spring-task-->
      <task:annotation-driven/>
      <!--任务调度线程池-->
      <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler"/>
  </beans>

quartz结合spring 使用定时任务与间隔任务

原文:https://www.cnblogs.com/bdsbdg/p/14252392.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!