spring定时器

Posted 浪子丶沙

tags:

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

在实际工作中,经常需要使用到定时任务,很多地方都会需要这种功能,比如做数据备份、同步等操作。

今天终于抽出时间总结了一下,写一个小例子;

基本使用:

spring的定时任务使用起来十分方便,只需要两步:1、写好执行定时任务的类和方法;2、配置spring定时任务配置文件:

spring定时器完整实例:

1.工程结构:

 

 2.需要定时执行的代码块:

package com.Task;

public class TaskDemo {
	private static int sf = 0;
	public void testTask(){
		sf++;
		System.out.println("10秒输出一次。。。。。sf:"+sf);
	}
}

 3.定时器配置文件:spring-task.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:p="http://www.springframework.org/schema/p"
	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.0.xsd   
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<!-- 定时器列表 -->
		<property name="triggers">
			<list>
				<ref local="TaskDemo" />
				 
			</list>
		</property>
	</bean>
	
	<!-- 设置时间 -->
	<bean id="TaskDemo" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail">
			<ref bean="TaskDemoDetail" />
		</property>
		<property name="cronExpression">
			<value>0/10 * * * * ?</value>
		</property>
	</bean>
    <!-- 设置需要执行的代码块 --> <bean id="TaskDemoDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class="com.Task.TaskDemo"/> </property> <property name="targetMethod"> <value>testTask</value> </property> </bean> </beans>

 4.web.xml配置spring-task.xml使其生效:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <display-name></display-name>    
 8   <welcome-file-list>
 9     <welcome-file>index.jsp</welcome-file>
10   </welcome-file-list>
11   
12   <servlet>
13     <servlet-name>dispatcherServlet</servlet-name>
14     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
15     <init-param>
16         <param-name>contextConfigLocation</param-name>
17         <param-value>
18                  classpath:conf/spring-task.xml
19             </param-value>
20     </init-param>
21     <load-on-startup>1</load-on-startup>
22 </servlet>
23 </web-app>

5.需要的jar包:http://pan.baidu.com/s/1bpacgKf

6.部署到tomcat即可执行定时任务;

so easy 有木有。。。。。。

说明:关于定时任务时间设置方面,网上很多设置详解:

字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * / 
表达式意义 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 
每天早上6点 
0 6 * * * 
每两个小时 
0 */2 * * * 
晚上11点到早上8点之间每两个小时,早上八点 
0 23-7/2,8 * * * 
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
0 11 4 * 1-3 
1月1日早上4点 
0 4 1 1 *

 

 

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

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

如何在使用片段和计时器的选项卡式活动上更新 UI

测试片段不执行定时器或示例超时

前端面试题之手写promise

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段