TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
前提注意:配置文件中如果 default-lazy-init="true",删掉或设置成false,不然注解会失效(这个坑找了好久)。: |9 L M% H P
一、说明 ' G! P/ A3 h7 p7 u
1 ]" W0 X# F1 i
以前项目一直使用Quartz的定时任务,虽然其功能强大,但是配置文件极其复杂,并且一个class下只能执行一个方法(貌似是)。定时任务多了以后对于维护xml配置文件时一件极为头疼的事情。+ \: `1 U8 g% z
4 R c- j4 h& l3 n- Q7 [
. c5 v; m; W) \- Y: z& `
前段时间把Quartz整合实例化入数据库了,做了一个任务列表,进行增删查改,的确是简单多了。在项目不重启的情况下可以对任务进行各种你想要的操作。如图所示操作:6 Q% x2 A0 E9 z4 f1 ?& Z( ~
) k, U4 V! v$ i+ a& a, m
0 M% ?$ M1 `) k# ~! @# r4 @9 h# d7 w9 ^9 D5 A, Q
2 _% S1 V" K5 f. a, o* b
但如果只是简单的跑个任务其实spring升级到3后已经自带任务调度器了,相比之下Spring task无论是理解还是使用都简单很多。但是Quartz有线程和线程管理以及集群等高级特性,所以大家可以自行选择了。不过一般情况下,觉得SpringTask足够了。( z3 d' F" J3 s
$ _7 Z& _" F$ ]+ r" |) [' ?( d* B6 Q s( Y) |& x" F7 H
Spring Task提供两种方式进行配置,注解和配置文件。使用注解虽然简单,不用配置xml,但是相对于修改比较频繁的任务来说,打包编译的过程也是挺麻烦的,建议使用配置文件实现。; ^6 G3 X7 c% l% Y6 q. t, z
3 s( d) a# u7 Q$ ?
8 C6 _$ v" j3 I$ {& |, R二、配置! ^# n' p/ C! O4 b
1)xml配置
7 f9 ~/ o- W( W4 l+ y3 a, h: B- <?xml version="1.0" encoding="UTF-8"?>, b H" k: ~2 N
- <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
) _+ S- K8 M3 l1 h2 k+ _ - xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" : S0 a( R9 i' T" t% }0 V( x( b8 U
- xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
( i9 Z" q& X+ x1 P k6 y8 m( e$ G+ a - xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="0 C3 B5 @7 j/ B, R1 D
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
" O. } M x5 b$ ~( @; u) h - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd1 h- J k. |/ N( i& m2 G: \' v
- http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd, {1 n- C: i& N, H6 W
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd% D; ]. |9 b- q& i! H6 W
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd* K2 z8 i8 n4 [" X/ ~# a( X
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
; J D& a$ `- U" u) B+ y; b - http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">0 f* i; y% n! C" \) y3 g
- F6 I$ d, L4 q R- `3 S f5 ?
- <description>Spring Configuration</description>
, i( V# `4 V9 m. _! X. F -
- m0 f c% ?, h1 ]" h - <context:component-scan base-package="task"/> ( s! T5 t" a% K! P5 `
- ; m7 I* l; x* o! Y
- <!-- 配置任务线性池 -->' a9 e( l7 w9 R9 K) }
- <task:executor id="executor" pool-size="10" /> * G- B8 l) S; E5 W7 v; k
- <task:scheduler id="scheduler" pool-size="10"/>
- H4 c) }/ g/ A& s' P% r - <task:annotation-driven scheduler="scheduler" executor="executor" proxy-target-class="true"/>) U! k! _+ ?6 y/ @
- <!-- 配置文件实现 如果使用配置文件实现 把注释解开即可然后 删除掉代码的注解-->. r; F1 a8 y+ u, u, l0 |% [
- <!-- <task:scheduled-tasks scheduler="scheduler"> ! d' d! C$ [( ?6 }5 y
- <task:scheduled ref="TestJob" method="test" cron="0/1 * * * * ?"/> # a, O! ^/ i0 B5 }" |, f4 N H; R, ]
- </task:scheduled-tasks> -->
# U; [& `9 U4 @! s - </beans>
复制代码 3 T- @/ G0 V8 e2 y/ I5 Q0 r6 W
2)代码实现1 I8 N2 X& b# o- A( y
- package task;
% Q, U% O4 _2 H s" n; W/ z - / i/ e/ K; Z5 t0 @
- import org.springframework.scheduling.annotation.Scheduled;
' X& o" x( P& T* v - import org.springframework.stereotype.Component;
8 ?: C; @: y! C$ C6 F& m9 f
, @: G: I. M3 n# p: \( ~' q) j- @Component("TestJob") 1 n6 }; I6 W& j8 ?) m' H. X6 s' ?
- public class TestJob { X% t0 o8 C9 }+ S8 D$ Y
- @Scheduled(cron = "0/5 * * * * ?")//每隔5秒隔行一次
* P8 k" y+ v2 `3 z - public void test1()
/ r$ \$ P$ K( B5 U: Q/ r - {0 P/ _7 O4 o( Z, `& V* h) d h
- System.out.println("job1 开始执行");
, w. X, K& V3 Q: ?# ~ - }
/ A- H) n$ X+ N - @Scheduled(cron = "0/5 * * * * ?")//每隔5秒隔行一次
+ I ^3 U3 j$ f - public void test2()' u1 T9 f. T0 s g: c5 U& k
- {
- u; t; b& i- w X - System.out.println("job2 开始执行");5 c) j! G( f. a3 n( a; v, K
- } ; K8 B; p, h9 C% ?* ` h
- }
复制代码 8 G( h4 `2 k0 V/ H. }4 c& k
项目启动后运行结果:
" |" l, c; l$ W; I: N4 L5 O
( ], [7 @/ T: [. U( R$ R( k0 s ^( q! O" M2 l$ r) Z
7 R' d i$ n7 J8 h# Y4 P% e
. v( s4 a/ q# J# P
5 S- s9 y Y$ v
CSDN下载:http://download.csdn.net/detail/zhulin2012/9576741 百度云下载:http://pan.baidu.com/s/1boW6WP5 |
|