spring-task

来源:互联网 发布:如何做数据透视表 编辑:程序博客网 时间:2024/05/29 15:58

前言

主要记录在项目中使用spring-taks作为定时任务需要注意的地方

一、spring-task 配置文件

<!--使用注解方式启动task --><task:annotation-driven /><task:scheduled-tasks >    <task:scheduled ref="serviceTestTask" method="test1" cron="0 0/30 0,1,2,3,4,22,23 * * ?" />    <task:scheduled ref="serviceTestTask" method="test2" cron="0 0/30 0,1,2,3,4,22,23 * * ?" /></task:scheduled-tasks>

大概只要这样配置就可以运行了,注意这样的配置,单个定时任务之间是串行的,就是说一个时间点只有一个job在执
行,因为spring-task默认的线程数是1,但我们需要的是在不同的定进任务之间是并行,需要修改成:

<!--使用注解方式启动task --><task:annotation-driven /><task:scheduled-tasks  pool-size="5" >    <task:scheduled ref="serviceTestTask" method="test1" cron="0 0/30 0,1,2,3,4,22,23 * * ?" />    <task:scheduled ref="serviceTestTask" method="test2" cron="0 0/30 0,1,2,3,4,22,23 * * ?" /></task:scheduled-tasks>

指定一个线程池的大小大于1就可以让多个任不同Job并行,具体线程池的大小可根据实际任务数据合理设置.
但如果有以下情况的定进任务

<task:scheduled-tasks  pool-size="5" >    <!--设置方法test1在 0,1,2,3,4,22,23 每30分钟执行一次,设置其它时间每2小时执行一次-->    <task:scheduled ref="serviceTestTask" method="test1" cron="0 0/30 0,1,2,3,4,22,23 * * ?" />    <task:scheduled ref="serviceTestTask" method="test1" cron="0 0 0/2 * * ?" />    <task:scheduled ref="serviceTestTask" method="test2" cron="0 0/30 0,1,2,3,4,22,23 * * ?" /></task:scheduled-tasks>

这个时候我们希望同一个方法test1是可以串行执行,而不同的方法test1,test2是可并行执行的.
但这个配置test1,test1,test2都会并行实现,如何实现同一任务串行,不同任务并行?此时我们需要配置2个scheduled,如下

<task:scheduler id="myScheduler1"/><task:scheduler id="myScheduler2" pool-size="5"/><task:scheduled-tasks  scheduler="myScheduler1">    <!--设置方法test1在 0,1,2,3,4,22,23 每30分钟执行一次,设置其它时间每2小时执行一次-->    <task:scheduled ref="serviceTestTask" method="test1" cron="0 0/30 0,1,2,3,4,22,23 * * ?" />    <task:scheduled ref="serviceTestTask" method="test1" cron="0 0 0/2 * * ?" /></task:scheduled-tasks><task:scheduled-tasks  scheduler="myScheduler2">     <task:scheduled ref="serviceTestTask" method="test2" cron="0 0/30 0,1,2,3,4,22,23 * * ?" /></task:scheduled-tasks>

同一任务,不同时间段执行,我们定义在一个scheduler,直接用默认的线程数1,让其串行.可并行的线程定义在另一个多线程的scheduler,
并且不同scheduler之间也并行的.

还有一点,在并行的scheduler中,同一个时间任务Job 执行时长是30分钟,设置每10分钟,此时执行耗时超过了
任务执行间隔,此时Job还是会等任务执行完后,才会再执行这个任务,而不是到时候后另一个线程重复执行.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾照过期1年多了怎么办 考驾照科目一考不过怎么办 我考驾照过期了怎么办 驾照过了审验期怎么办 驾照过期3年了怎么办 如果学车过期了怎么办 行驶证过期了3年怎么办 行驶证过期没审怎么办 行驶证过期两年怎么办 驾驶证过期7年了怎么办 换驾照过一个月怎么办? 行驶证正本掉了怎么办 车的行驶证丢了怎么办 三星s6 屏幕坏了怎么办 手机摔成黑屏了怎么办 三星屏幕漏液了怎么办 三星s8屏幕漏液怎么办 屏幕紫色漏液了怎么办 华为手机屏碎了怎么办 小米2s按键失灵怎么办 魅蓝屏幕摔花了怎么办 小米手机屏碎了怎么办 厦门医保卡坏了怎么办 医保卡丢了北京怎么办 重庆社保卡丢了怎么办 沈阳医保卡丢了怎么办 小孩医保卡丢了怎么办 少儿医保卡丢了怎么办 孩子医保卡丢了怎么办 医保卡存折丢了怎么办 济宁医保卡丢了怎么办 大连医保卡丢了怎么办 职工医保卡丢了怎么办 太原医保卡丢了怎么办 南京医保卡丢了怎么办 苏州医保卡丢了怎么办 我的医保卡丢了怎么办 医保卡丢了怎么办出院 住院医保卡丢了怎么办 社会医保卡丢了怎么办 医保本丢了,住院怎么办