zoukankan      html  css  js  c++  java
  • Spring:定时任务定时器 Quartz的使用

    Quartz的使用方式

    配置文件方式

    一、引入依赖

    <!-- spring 其他依赖省略 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
    <!-- Quartz依赖 -->
      <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
            <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>
    

    二、创建自定义task类

    public class MyTask {
    
        //定时任务执行的方法
        public void execute() {
            System.out.println("当前系统时间:" + new Date().toLocaleString());
        }
    
    }

    三、配置spring的配置文件

    配置任务类(MyTask)
    
    <!--配置我们自定义的任务类-->
    <bean id="myTask" class="top.wintp.crud.task.MyTask"/>
    配置任务详情(jobDetail)
    
       <bean id="jobDetail"
              class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    
            <!--配置用到的job示例(目标对象)-->
            <property name="targetObject" ref="myTask"/>
    
            <!--job中需要执行的方法(目标方法)-->
            <property name="targetMethod" value="execute"></property>
    
        </bean>
    配置触发器
    
    
        <!--配置触发器(配置任务执行时间)-->
        <bean id="cronTriggerFactoryBean"
              class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    
            <!--注入任务详情-->
            <property name="jobDetail" ref="jobDetail"/>
    
            <!--设置任务执行的时间(使用cron表达式进行标识)  即通过表达式进行指定任务执行的时间点-->
            <property name="cronExpression">
                <!--每两秒执行一次-->
                <value>0/2 * * * * ?</value>
            </property>
    
        </bean>
    
    配置调度工厂
    
     <!--配置调度工厂-->
        <bean id="schedulerFactoryBean"
              class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="cronTriggerFactoryBean"/>
                    <!--可以配置多个-->
                </list>
            </property>
        </bean>
    

    配置都是固定的,如果我们新增一个定时任务,仅仅只需要新增一个自定义的task类。新增一个任务详情(修改执行的方法以及任务类的引用),新增触发器(修改cron表达式)。将我们新增的触发器添加到调度工厂的triggers的引用中即可。
    cron表达式在线生成网址(百度上有很多,请自行百度)

    四、测试类测试是否成功

    public class TestMyQuartz {
    
        public static void main(String[] args) {
            ApplicationContext context
                    = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    
        }
    
    }

    核心概念

    1、scheduler是一个计划调度器容器,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。

    2、JobDetail是一个可执行的工作,它本身可能是有状态的。

    3、Trigger触发器代表一个调度参数的配置,什么时候去调。

    4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。

    5、scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。

  • 相关阅读:
    LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)
    LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)
    LeetCode 617. 合并二叉树(Merge Two Binary Trees)
    LeetCode 206. 反转链表(Reverse Linked List) 16
    LeetCode 104. 二叉树的最大深度(Maximum Depth of Binary Tree)
    LeetCode 110. 平衡二叉树(Balanced Binary Tree) 15
    LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154334.html
Copyright © 2011-2022 走看看