1、基于spring的配置文件
- <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:task="http://www.springframework.org/schema/task"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-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/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
- <task:annotation-driven /> <!-- 定时器开关-->
- <bean id="myTaskXml" class="com.spring.task.MyTaskXml"></bean>
- <task:scheduled-tasks>
- <!--
- 这里表示的是每隔五秒执行一次
- -->
- <task:scheduled ref="myTaskXml" method="show" cron="*/5 * * * * ?" />
- <task:scheduled ref="myTaskXml" method="print" cron="*/10 * * * * ?"/>
- </task:scheduled-tasks>
- <!-- 自动扫描的包名 -->
- <context:component-scan base-package="com.spring.task" />
- </beans>
2、基于xml的定时器任务
- package com.spring.task;
- /**
- * 基于xml的定时器
- * @author hj
- */
- public class MyTaskXml {
- public void show(){
- System.out.println("XMl:is show run");
- }
- public void print(){
- System.out.println("XMl:print run");
- }
- }
3、基于注解的定时器任务
- package com.spring.task;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- /**
- * 基于注解的定时器
- * @author hj
- */
- @Component
- public class MyTaskAnnotation {
- /**
- * 定时计算。每天凌晨 01:00 执行一次
- */
- @Scheduled(cron = "0 0 1 * * *")
- public void show(){
- System.out.println("Annotation:is show run");
- }
- /**
- * 心跳更新。启动时执行一次,之后每隔2秒执行一次
- */
- @Scheduled(fixedRate = 1000*2)
- public void print(){
- System.out.println("Annotation:print run");
- }
- }
4、测试
- package com.spring.test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class Main {
- public static void main(String[] args) {
- ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-mvc.xml");
- }
- }
-
若上面的定时器没法应,可加上@Lazy(false)
-
二:基于注解方式
使用注解方式不需要再每写一个任务类还要在xml文件中配置下,方便了很多。使用Spring的@Scheduled,下面先看一注解@Scheduled在源文件中的定义:
@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Scheduled { public abstract String cron(); public abstract long fixedDelay(); public abstract long fixedRate(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
cron:表示指定cron表达式。(cron类型表示 是指定时间触发器触发任务执行!)
- fixedDelay:表示从上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。
- fixedRate:表示从上一个任务开始到下一个任务开始的间隔,单位是毫秒。
下面进行一下具体的配置过程:
1:编写pojo类
package com.tclshop.cms.center.web.task; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class WebTask { // 每五秒执行一次 @Scheduled(cron = "0/5 * * * * ?") public void TaskJob() { System.out.println("test second annotation style ..."); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
2:配置xml文件
下面贴出相关的配置文件内容:
<!-- 开启这个配置,spring才能识别@Scheduled注解 --> <task:annotation-driven scheduler="qbScheduler" mode="proxy"/> <task:scheduler id="qbScheduler" pool-size="10"/>
- 1
- 2
- 3
注:理论上只需要加上这句配置就可以了,其他参数都不是必须的。
配置完成,运行就能看到效果!总结:这种定时器的使用,不需要集成其他父类定时器,使用简单方便!功能也很强大!
附:cronExpression的配置说明
字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * /
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
例子:
CRON表达式 含义 "0 0 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分每分钟一次触发 "0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发 "0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发 "0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发 "0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发 "0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-
-
二:基于注解方式