前提注意:配置文件中如果 default-lazy-init="true",删掉或设置成false,不然注解会失效(这个坑找了好久)。; Z+ R& K, G% y+ j7 ~& z
一、说明
. l- X: I2 |7 j/ \" j6 l, S7 C! N/ z' J6 o
以前项目一直使用Quartz的定时任务,虽然其功能强大,但是配置文件极其复杂,并且一个class下只能执行一个方法(貌似是)。定时任务多了以后对于维护xml配置文件时一件极为头疼的事情。4 F' j0 x% G$ l8 P2 \( B' A' Y
' g- a z1 \ W" d
' }; h8 h, t. v" O0 m/ \) w+ D2 T
前段时间把Quartz整合实例化入数据库了,做了一个任务列表,进行增删查改,的确是简单多了。在项目不重启的情况下可以对任务进行各种你想要的操作。如图所示操作:% t! b' v7 c |/ w8 C/ x, \
0 R! b( I ]: d" Z
: Y; E; m* P7 i/ g L# \/ d4 Z, O! Q9 r7 Q# v
7 L: L6 M% G, q/ X, f: H2 |" {
但如果只是简单的跑个任务其实spring升级到3后已经自带任务调度器了,相比之下Spring task无论是理解还是使用都简单很多。但是Quartz有线程和线程管理以及集群等高级特性,所以大家可以自行选择了。不过一般情况下,觉得SpringTask足够了。& R; X/ x5 W& M. ?+ J2 a
) ~% ]' b, K. G; i% ?
1 t# [7 [+ O5 M# s, T% E Spring Task提供两种方式进行配置,注解和配置文件。使用注解虽然简单,不用配置xml,但是相对于修改比较频繁的任务来说,打包编译的过程也是挺麻烦的,建议使用配置文件实现。
2 t% _8 W6 b( E( u5 X; t. `* t# `2 C3 r/ ?
: e+ r! L# u$ s$ L& U1 y
二、配置2 r( q- a3 H9 H1 |1 w. A
1)xml配置
6 W! p) y. K; H( R4 y9 O- `9 W; {- <?xml version="1.0" encoding="UTF-8"?>
* @( |9 C- z: |& o' X* r - <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" F: v. G6 j6 y# P& v7 }4 H
- xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" f _, b6 T# a5 t' i7 @
- xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
/ o: G* C( W4 M$ O/ I - xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="
0 {9 K; U/ q+ \! X! Z1 F - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
" V; [) f8 x1 g4 }9 b5 m4 K - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd$ |: }. J& V3 T3 N4 }
- http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
* H" g; l6 }: l) i: a! ] - http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd Z! n! d( }) C+ y" l0 p& T5 R
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd4 {/ B# A9 ]8 |; g3 f
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd% N4 F% C O1 c8 S" T& g0 e! A
- http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">
( I; |6 ]( [! z. z6 }
|& s, C( c2 g$ A* ]- <description>Spring Configuration</description>; G5 d# }' p7 X: @9 Y4 G h8 l
- 0 K+ P8 E0 b$ D B* {
- <context:component-scan base-package="task"/> * R/ i* n8 p: o5 V, X8 W; e3 S5 q
- , E# f: ~9 q' m) o) R' |
- <!-- 配置任务线性池 -->
/ B! I; O; a/ F8 |! B) a* ^: j - <task:executor id="executor" pool-size="10" />
/ n& n6 s0 @ ?. ^: C: G - <task:scheduler id="scheduler" pool-size="10"/>
y* I4 V- m0 N# B3 ?+ z5 h - <task:annotation-driven scheduler="scheduler" executor="executor" proxy-target-class="true"/>9 H1 R5 u/ B% O0 P/ o+ M" C
- <!-- 配置文件实现 如果使用配置文件实现 把注释解开即可然后 删除掉代码的注解-->
: K9 ~0 T; Q1 n; | - <!-- <task:scheduled-tasks scheduler="scheduler">
& y( b9 x" V1 r/ N+ \ t - <task:scheduled ref="TestJob" method="test" cron="0/1 * * * * ?"/>
* s ]2 n* T/ `9 f/ r - </task:scheduled-tasks> --> 0 \! @0 L D7 R+ S
- </beans>
复制代码 + z* _7 ?+ F7 e" J
2)代码实现; `- e( f. [+ a% s# U
- package task;# M, _; F* v9 n
- 5 \ t+ U5 Q9 B; L$ |: j: Z
- import org.springframework.scheduling.annotation.Scheduled;% C. c/ O( f9 ?" y+ V+ p- s& H* O" z$ e# W
- import org.springframework.stereotype.Component;
: j2 j6 p* H. f+ G- x; j1 g6 r5 o
% X! l- e% L' \/ _8 O- @Component("TestJob")
$ G* o! O( J3 {$ [! u - public class TestJob {' n* J# _$ ~! T, y' r0 C
- @Scheduled(cron = "0/5 * * * * ?")//每隔5秒隔行一次
, B3 F2 f3 [8 L: X& Y5 @& o a, K2 ~) x - public void test1()
! y9 x1 j! o, S. j2 D8 U1 O - {
* ]/ [3 ~1 A# ^ - System.out.println("job1 开始执行");% F! e M/ k% F9 l$ Q
- } $ n$ v2 _; j+ K
- @Scheduled(cron = "0/5 * * * * ?")//每隔5秒隔行一次 1 [7 t! a, T! k) v
- public void test2()
, S# i4 n+ }" W, S) S - {
' z/ [) V2 C( {& f q4 R - System.out.println("job2 开始执行");
6 v5 Q! P% Y0 w - }
o7 n% M0 s( L# L! n - }
复制代码
# p' Y0 f6 X8 w项目启动后运行结果:
$ ]* F9 R$ y0 L/ l4 I- R8 O
/ [$ N) O3 k( x" w& G$ q3 E- {) X7 x) S0 U- h; o7 t) X$ l; G
+ |6 u+ q- m. W1 f8 X L1 K6 v' }. Z
# ~/ d! d0 c' l5 t
CSDN下载:http://download.csdn.net/detail/zhulin2012/9576741 百度云下载:http://pan.baidu.com/s/1boW6WP5 |