导入依赖
   <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>