下面小编就为大家分享一篇Spring整合Quartz Job以及Spring Task的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Spring整合Quartz Job以及Spring Task的实现方法_定时任务

Spring中常用的定时任务的主要有两种

1、Spring整合Quartz Job

2、Spring 3.0以后自带的Task

一、两种定时任务的实现方式

Quartz job

1、首先编写任务类

​?​


1

2

3

4

5

6

7

8

9

10

11

12

13

14



​package com.yjf.job;​

 

​import org.slf4j.Logger;​

​import org.slf4j.LoggerFactory;​

​/**​

​* @author yjf​

​*/​

​public class ExampleJob {​

​private static final Logger logger = LoggerFactory.getLogger(ExampleJob.class);​

 

​public void run() {​

​logger.info("ExampleJob运行了");​

​}​

​}​


2、添加Spring整合Quartz的配置

 

​?​


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29



​<!--集成quartz job-->​

​<!-- 定义任务的bean -->​

​<​​​​bean​​​ ​​id​​​​=​​​​"exampleJob"​​​ ​​class​​​​=​​​​"com.yjf.job.ExampleJob"​​​​/>​

​<!-- 指定bean的方法 -->​

​<​​​​bean​​​ ​​id​​​​=​​​​"exampleJobMethod"​​​ ​​class​​​​=​​​​"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"​​​​>​

​<​​​​property​​​ ​​name​​​​=​​​​"targetObject"​​​ ​​ref​​​​=​​​​"exampleJob"​​​​/>​

​<​​​​property​​​ ​​name​​​​=​​​​"targetMethod"​​​ ​​value​​​​=​​​​"run"​​​​/>​

​<​​​​property​​​ ​​name​​​​=​​​​"concurrent"​​​ ​​value​​​​=​​​​"true"​​​​/>​

​</​​​​bean​​​​>​

​<!-- Quartz的触发器分两种 -->​

​<!-- 第一种SimpleTriggerFactoryBean只支持按照一定频度调用任务,如每隔10s一次 -->​

​<!--<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">-->​

​<!--<property name="jobDetail" ref="exampleJobMethod"/>-->​

​<!--<property name="startDelay" value="0"/>-->​

​<!--<property name="repeatInterval" value="10"/>-->​

​<!--</bean>-->​

​<!-- 第二种CronTriggerFactoryBean 使用cronExpression表达式可以自定义方式执行 -->​

​<​​​​bean​​​ ​​id​​​​=​​​​"exampleTrigger"​​​ ​​class​​​​=​​​​"org.springframework.scheduling.quartz.CronTriggerFactoryBean"​​​​>​

​<​​​​property​​​ ​​name​​​​=​​​​"jobDetail"​​​ ​​ref​​​​=​​​​"exampleJobMethod"​​​​/>​

​<​​​​property​​​ ​​name​​​​=​​​​"cronExpression"​​​ ​​value​​​​=​​​​"0/10 * * * * ?"​​​​/>​

​</​​​​bean​​​​>​

​<!-- 配置调度工厂 -->​

​<​​​​bean​​​ ​​class​​​​=​​​​"org.springframework.scheduling.quartz.SchedulerFactoryBean"​​​​>​

​<​​​​property​​​ ​​name​​​​=​​​​"triggers"​​​​>​

​<​​​​list​​​​>​

​<​​​​ref​​​ ​​bean​​​​=​​​​"exampleTrigger"​​​​/>​

​</​​​​list​​​​>​

​</​​​​property​​​​>​

​</​​​​bean​​​​>​


Spring Task

1、编写任务类

​?​


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19



​package com.yjf.job;​

 

​import org.slf4j.Logger;​

​import org.slf4j.LoggerFactory;​

​import org.springframework.scheduling.annotation.Scheduled;​

​import org.springframework.stereotype.Component;​

 

​/**​

​* @author yjf44568​

​*/​

​@Component​

​public class SearchUserJob{​

​private Logger logger = LoggerFactory.getLogger(this.getClass());​

 

​@Scheduled(cron = "*/5 * * * * ?")​

​public void doIt(){​

​logger.info("我正在做");​

​}​

​}​


2、添加task的配置文件

 

​?​


1

2

3

4

5



​<!-- 使用注解方式配置 -->​

​<!-- 启用task定时任务 -->​

​<​​​​task:annotation-driven​​​​/>​

​<!--扫描job所在的包的位置 -->​

​<​​​​context:component-scan​​​ ​​base-package​​​​=​​​​"com.yjf.job"​​​​/>​


二、比较一下两者的优缺点

Quartz Job特点

1、功能强大,但是配置略微繁琐

2、Quartz每次执行都创建一个新的任务对象

3、Quartz的某次执行任务过程中抛出异常,不影响下一次任务的执行,当下一次执行时间到来时,定时器会再次执行任务。

Spring Task 特点

1、使用@Scheduled注解及少量配置实现,使用简单

2、Task每次执行使用的是同一个任务对象

3、TimerTask一旦某个任务在执行过程中抛出异常,则整个定时器生命周期就结束,以后永远不会再执行该定时器任务。

目前,我个人还是使用Quartz Job较多

以上这篇Spring整合Quartz Job以及Spring Task的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。