Ssm整合quartz定时任务
1.添加maven
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.0</version>
</dependency>
2.配置spring-quartz.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 添加调度的任务bean 配置对应的类-->
<bean id="myQuartz" class="com.athome.quarter.MyJob" />
<!--配置调度具体执行的方法-->
<bean id="myMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myQuartz" /><!--将上面的任务bean myQuartz注入到这里-->
<property name="targetMethod" value="runJob" />
<!-- 使用Quartz做计划任务时,默认情况下,当前任务总会执行,无论前一个任务是否结束 -->
<!-- 下面的concurrent属性默认为true,设置成false可以让任务按照顺序执行,上一个任务没有结束,下面的任务不会执行-->
<property name="concurrent" value="false" />
</bean>
<!--配置调度执行的触发的时间-->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myMethod" />
<property name="cronExpression">
<!--每隔20秒执行一次-->
<value>0/20 * * * * ?</value>
</property>
<!--
0 0 2 * * ? 秒 分 时 天 月 日 每天凌晨2点
*/5 * * * * ? 每隔5秒执行一次
0 */5 * * * ? 每隔5分钟执行一次
0 30 0 * * ? 每天半夜12点30分执行一次
0 15 10 ? * * 或 0 15 10 * * ? 每天上午10:15执行一次
0 * 14 * * ? 每天14点到14:59分,每1分钟执行一次
0 0-5 14 * * ? 每天14点到14:05分,每1分钟执行一次
0 0 7-23 * * ? 每天7点到23点,每整点执行一次
0 0 18,22 * * ? 每天18点、22点执行一次
不全的话 自行百度。
-->
</bean>
<!--
quartz的调度工厂只能有一个,多个调度任务在list中添加 。
bean中的id可能需要加上,之前我自己没加上导致启动到不知道触发器报错。不过也有看到没加上id也可以正常运作,可能是版本的原因吧。
-->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myTrigger" />
</list>
</property>
</bean>
</beans>
3.把spring-quartz.xml加到applicationContext.xml
<import resource="spring-quartz.xml" />
4.将spring-quartz.xml加载在web.xml中
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext.xml,
classpath*:spring-quartz.xml
</param-value>
</context-param>
5.编写对应的任务
在com.athome.quarter.MyJob类中写一个方法,方法名叫runJob。
类名和方法名要与spring-quartz.xml一一对应。
package com.athome.quarter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyJob {
public void runJob(){
System.out.println("现在的时间是:"+new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss").format(new Date()));
}
}
结果:
2020-12-08 21:50:00,000 23106 [SchedulerThread] DEBUG rtz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
2020-12-08 21:50:00,000 23106 [actory_Worker-2] DEBUG org.quartz.core.JobRunShell - Calling execute on job DEFAULT.myMethod
现在的时间是:2020-12-08:21:50:00
2020-12-08 21:50:00,005 23111 [SchedulerThread] DEBUG rtz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
2020-12-08 21:50:20,001 43107 [SchedulerThread] DEBUG rtz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
2020-12-08 21:50:20,001 43107 [actory_Worker-3] DEBUG org.quartz.core.JobRunShell - Calling execute on job DEFAULT.myMethod
现在的时间是:2020-12-08:21:50:20
2020-12-08 21:50:20,001 43107 [SchedulerThread] DEBUG rtz.core.QuartzSchedulerThread - batch acquisition of 1 triggers