spring 框架自带的定时器功能

Posted wangshichang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 框架自带的定时器功能相关的知识,希望对你有一定的参考价值。

1...pom.xml 文件配置

 1  <dependencies>
 2     <dependency>
 3       <groupId>junit</groupId>
 4       <artifactId>junit</artifactId>
 5       <version>4.11</version>
 6       <scope>test</scope>
 7     </dependency>
 8       <dependency>
 9           <groupId>org.quartz-scheduler</groupId>
10           <artifactId>quartz</artifactId>
11           <version>1.8.5</version>
12       </dependency>
13       <dependency>
14           <groupId>org.springframework</groupId>
15           <artifactId>spring-context-support</artifactId>
16           <version>3.2.9.RELEASE</version>
17       </dependency>
18       <dependency>
19           <groupId>org.springframework</groupId>
20           <artifactId>spring-core</artifactId>
21           <version>3.2.9.RELEASE</version>
22       </dependency>
23       <dependency>
24           <groupId>org.springframework</groupId>
25           <artifactId>spring-webmvc</artifactId>
26           <version>3.2.9.RELEASE</version>
27       </dependency>
28 <!--      事务管理 必须引入-->
29       <dependency>
30           <groupId>org.springframework</groupId>
31           <artifactId>spring-tx</artifactId>
32           <version>3.2.9.RELEASE</version>
33       </dependency>
34   </dependencies>

2...applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans
 5        http://www.springframework.org/schema/beans/spring-beans.xsd">
 6 <!--创建的java 类  方法 -->
 7     <bean id="testTime" class="com.wsc.core.time.TestTime"></bean>
 8     <bean id="jobDetailFactoryBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
 9 <!--      目标 java类名-->
10         <property name="targetObject" ref="testTime"></property>
11 <!--     目标 java方法名-->
12         <property name="targetMethod" value="testTime"></property>
13     </bean>
14     <bean id="triggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
15         <property name="jobDetail" ref="jobDetailFactoryBean"></property>
16 <!--      cron 表达式-->
17         <property name="cronExpression" value="0/5 * * * * ?"></property>
18     </bean>
19     <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
20         <property name="triggers" >
21             <list>
22                 <ref bean="triggerFactoryBean"></ref>
23             </list>
24         </property>
25     </bean>
26 </beans>

3...web.xml 

 1 <!DOCTYPE web-app PUBLIC
 2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <web-app>
 6   <display-name>Archetype Created Web Application</display-name>
 7 <!--    引入 spring 配置文件-->
 8     <context-param>
 9         <param-name>contextConfigLocation</param-name>
10         <param-value>classpath:applicationContext.xml</param-value>
11     </context-param>
12 <!--    监听器-->
13     <listener>
14         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
15     </listener>
16 
17 </web-app>

4...java 代码

 1 package com.wsc.core.time;
 2 
 3 import java.util.Date;
 4 
 5 /**
 6  * @version 1.0
 7  * @ClassName TestTime
 8  * @Description TODO
 9  * @Author WSC
10  * @Date 2019/8/18 11:24
11  **/
12 public class TestTime 
13 //    java 简单的方法  定义定时功能
14     public void testTime()
15         System.out.println(new Date());
16     
17 

5...启动tomcat 测试 运行结果

 1 Sun Aug 18 12:06:30 CST 2019
 2 Sun Aug 18 12:06:35 CST 2019
 3 Sun Aug 18 12:06:40 CST 2019
 4 Sun Aug 18 12:06:45 CST 2019
 5 Sun Aug 18 12:06:50 CST 2019
 6 Sun Aug 18 12:06:55 CST 2019
 7 Sun Aug 18 12:07:00 CST 2019
 8 Sun Aug 18 12:07:05 CST 2019
 9 Sun Aug 18 12:07:10 CST 2019
10 Sun Aug 18 12:07:15 CST 2019

6...cron 表达式

*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发 
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点 

0 0 12 ? * WED 表示每个星期三中午12点
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发 
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 0 23 L * ? 每月最后一天23点执行一次
0 15 10 L * ? 每月最后一日的上午10:15触发 
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发 
0 15 10 * * ? 2005 2005年的每天上午10:15触发 
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发 
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发


"30 * * * * ?" 每半分钟触发任务
"30 10 * * * ?" 每小时的10分30秒触发任务
"30 10 1 * * ?" 每天1点10分30秒触发任务
"30 10 1 20 * ?" 每月20号1点10分30秒触发任务
"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务
"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务
"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务
"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务
"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务
"15-45 * * * * ?" 15到45秒内,每秒都触发任务
"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务
"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务
"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务
"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务
"0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务

注:

执行任务的类不用继承其他超级类。这种方式可以实现低版本的spring(4.1.0)以前版本和高版本quartz(2.X)的结合使用。
如果公司使用spring4.1.0以前版本,又不想使用quartz1.X版本, 可以通过这种方式。

(如果使用高版本spring和低版本quartz:报错。原因是 JobDetailFactoryBean的创建需要JobDetailImpl, 而低版本quartz1.X包下没有该实现类。)

以上是关于spring 框架自带的定时器功能的主要内容,如果未能解决你的问题,请参考以下文章

Spring task定时任务

spring自带的定时任务功能@EnableScheduling

spring自带的定时任务功能@EnableScheduling

spring自带的定时任务功能,基于注解和xml配置

Spring定时任务为啥没有执行

Spring Boot整合Scheduled定时任务器整合Quartz定时任务框架