实例:
Task类:
Java对应代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package
com.axb.cheney.task;
import
java.sql.ResultSet;
import
java.sql.SQLException;
import
org.springframework.scheduling.annotation.Scheduled;
import
org.springframework.stereotype.Component;
/**
* 心跳更新。启动时执行一次,之后每隔2秒执行一次
* @Scheduled(fixedRate = 1000*2)
*/
@Component
public
class
ManageSql {
@Scheduled
(cron=
"0/30 * * * * ? "
)
//间隔5秒执行
public
void
test(){
System.out.println(
"定时任务开始啦,哈哈哈"
);
System.out.println(
"<<<---------结束执行HR数据同步任务--------->>>"
);
}
}
|
配置:
中添加以下对应内容 :
1、xmlns 加下面的内容:
xmlns:task="http://www.springframework.org/schema/task"
2、然后xsi:schemaLocation加下面的内容:
http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-4.1.xsd
3、最后是我们的task任务扫描注解
<task:annotation-driven/>
4、配置的扫描位置是
<context:component-scan base-package="com.XXX.task"></context:component-scan>
添加后,如下图所示:
注解说明。
Spring 自带的定时任务执行@Scheduled注解,可以定时的、周期性的执行一些任务。查看@Scheduled的注解可以看到有以下三种:
1.1 String cron() default “” ;
1
2
3
4
5
|
//定义一个按时间执行的定时任务,在每天1:00执行一次。
@Scheduled
(cron =
"0 0 1* * ?"
)
public
void
run() {
//执行代码
}
|
example
1
2
3
4
5
6
7
8
9
10
11
|
"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、spring的注解@Scheduled 需要写在实现方法上;
2、定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true),不能指向任何的参数;
3、如果该方法需要与应用程序上下文的其他对象进行交互,通常是通过依赖注入来实现;
4、实现类上要有组件的注解@Component。