Spring定时任务

来源:互联网 发布:手机淘宝5.6.9版本 编辑:程序博客网 时间:2024/06/07 12:39

Spring提供了一个很简单的方法做定时任务,我之前用过quartz,这个虽然也是spring的定时任务技术,但是我感觉quartz任然是比较复杂的。关于quartz实现定时任务这里就不详细讲解了。今天主要讲解利用spring task:注解主动注入定时任务

 1 首先需要在spring-context.xml文件中引入下列代码。pool-size 定义了任务池的大小。

<!-- 计划任务配置,用 @Service @Lazy(false)标注类,用@Scheduled(cron = "0 0 2 * * ?")标注方法 --><task:executor id="executor" pool-size="10" /><task:scheduler id="scheduler" pool-size="10" /><task:annotation-driven scheduler="scheduler" executor="executor" proxy-target-class="true" /><!-- 每隔5秒执行一次:*/5 * * * * ? --><!-- 每隔1分钟执行一次:0 */1 * * * ? --><!-- 每天23点执行一次:0 0 23 * * ? --><!-- 每天凌晨1点执行一次:0 0 1 * * ? --><!-- 每月1号凌晨1点执行一次:0 0 1 1 * ? --><!-- 每月最后一天23点执行一次:0 0 23 L * ? --><!-- 每周星期天凌晨1点实行一次:0 0 1 ? * L --><!-- 在26分、29分、33分执行一次:0 26,29,33 * * * ? --><!-- 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ? -->

2 根据1 中的第一行注释。我们新建一个TaskScheduService类并用@Service @Lazy(false)标注,类中我定义了两个测试方法,第一个方法每个5秒钟执行一次,第二个方法在每个小时的 56分钟执行一次。(具体的执行时间乐意根据 1 中的注释进行配置)

@Service@Lazy(false)public class TaskScheduService {@Scheduled(cron = "*/5 * * * * ?")public void testTaskSchedu(){System.out.println("每隔5秒执行一次"+new Date());}@Scheduled(cron = "0 56,29,33 * * * ?")public void testTaskSchedu2(){System.out.println("在55分、29分、33分执行一次"+new Date());}}
3 启动项目看结果 下面是我的程序和结果 代码中有一个错 第28行应该输出在 56分......



利用spring的task注解注册任务,是很简单的。

但是 利用quartz做定时任务有一个好处是,定时任务的启动时间可以在xml中配置,在项目发布后,运维人员都可以修改启动时间的条件,重新启动即可,但是利用spring的task注解注册的任务启动时间的条件是在java代码中写的,如果要修改条件,修改后必须重新编译才能部署。



原创粉丝点击