SSM 最简单的使用Quartz实现定时任务

简介: SSM 最简单的使用Quartz实现定时任务

前言, 该篇SSM整合Quartz,需要做的配置是:


1.配置任务调度工厂

2.配置任务调度触发器

3.配置任务调度实现方法类(包括Cron表达式、是否允许并发等)

 

导入核心依赖(其余的spring-context/spring-mvc等那些就不做展列了):


    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.2.1</version>
    </dependency>


首先是配置XML文件,我是单独创建了一个spring-quartz-context.xml:


<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
">
    <!-- ======================== 调度工厂 ======================== -->
    <bean id="quartzFactoryBean"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="CronTriggerBean"/>
            </list>
        </property>
    </bean>
    <!-- ======================== 调度触发器 ======================== -->
    <bean id="CronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="SpringQtzJobMethod"/>
        <!--每天18点执行一次:0 0 18 * * ?-->
        <property name="cronExpression" value="*/5 * * * * ?"/>
    </bean>
    <!-- ======================== 调度任务 ======================== -->
    <!-- 定义目标bean和bean中的方法 -->
    <bean id="SpringQtzJob" class="com.zqgame.qp.quartzJob.QuartzTask"/>
    <!-- 使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过targetMethod指定调用方法 -->
    <bean id="SpringQtzJobMethod"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!--定时任务的方法类-->
        <property name="targetObject" ref="SpringQtzJob"/>
        <!--定时任务方法的名称-->
        <property name="targetMethod" value="execute"/>
        <!-- 不允许并发 需等待上次执行结束-->
      <!--  <property name="concurrent" value="false"/>-->
    </bean>
</beans>


然后是任务调度方法的类QuartzTask.java:


import java.util.Date;
import static java.lang.Thread.sleep;
/**
 * @Author : JCccc
 * @CreateTime : 2019/8/7
 * @Description :
 **/
public class QuartzTask {
    private static int COUNT_NUM = 0;
    public void execute() throws InterruptedException {
        long ms = System.currentTimeMillis();
        System.out.println("\t\t" + new Date(ms));
        System.out.println("(" + COUNT_NUM++ + ")");
//        sleep(10000);
//        System.out.println("当前的COUNT_NUM是:"+COUNT_NUM);
    }
}


OK,把项目跑起来,看看效果,每5秒执行一次很正确:


image.png


那么到此其实已经结束,但是如果你看了上面的代码,你可以看到xml配置里面有一个是否允许并发(屏蔽代表允许),然后调度任务的方法类里面也屏蔽了2行代码。


接下来我们把QuartzTask.java里面的2行代码打开注释,然而xml里面依然是允许并发(注释状态)


        sleep(10000);
        System.out.println("当前的COUNT_NUM是:"+COUNT_NUM);


接下来再把项目跑起来,看看效果,如下(可以看到明显已经乱了,因为每次任务执行时间长过了间隔,而我们是允许并发的情形,即不需要等上一个任务执行完再执行下一个任务,所以就乱了):


image.png


所以,我建议一般情况,调度任务每一次是有关联的,设置不允许并发:


image.png

相关文章
|
6月前
|
存储 NoSQL Java
【十】springboot整合quartz实现定时任务优化
【十】springboot整合quartz实现定时任务优化
112 0
|
6月前
|
Java 调度
SpringBoot中实现定时任务(Quartz)(二)
SpringBoot中实现定时任务(Quartz)
57 0
SpringBoot中实现定时任务(Quartz)(二)
|
6月前
|
Java 调度 Spring
SpringBoot中实现定时任务(Quartz)(一)
SpringBoot中实现定时任务(Quartz)
88 0
SpringBoot中实现定时任务(Quartz)(一)
|
6月前
|
缓存 Java 数据挖掘
SpringBoot整合定时任务技术Quartz
SpringBoot整合定时任务技术Quartz
99 0
|
6月前
|
SQL Java 调度
SpringBoot 整合 Quartz 定时任务框架
SpringBoot 整合 Quartz 定时任务框架
153 0
|
Java 调度 Maven
spring boot 2.0 quartz 轻松实现定时任务和作业调度
spring boot 2.0 quartz 轻松实现定时任务和作业调度
122 0
|
SQL 存储 Java
SpringBoot集成Quartz(定时任务)
SpringBoot集成Quartz(定时任务)
SpringBoot集成Quartz(定时任务)
|
SQL Java 数据库
springboot整合Quartz实现动态配置定时任务
在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能。
3644 0
|
Java Maven 数据库
SSM整合Quartz(八)上
SSM整合Quartz(八)上
200 0
SSM整合Quartz(八)上
|
Java 数据库 Spring
SSM整合Quartz(八)下
SSM整合Quartz(八)下
156 0
SSM整合Quartz(八)下