spring task和线程池的示例分析
导读:本文共7955字符,通常情况下阅读需要27分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: spring task和线程池的研究1、如何实现spring task定时任务的配置因工作需要,需要定时执行一个方法,通过相关比较后,发现spring自带的task 可以满足,配置简单步骤1)增加配置文件 ,在applicationContext-cfg.xml 主配置文件里面添加 相关task标签<beansxmlns="http://www.... ...
目录
(为您整理了一些要点),点击可以直达。因工作需要,需要定时执行一个方法,通过相关比较后,发现spring自带的task 可以满足,配置简单
步骤
1)增加配置文件 ,在applicationContext-cfg.xml 主配置文件里面添加 相关task标签
2)编写bean类和执行方法
编写jobService类,里面实现testjobThread方法,调用的spring注入过的action、service方法
3)配置task相关配置文件,在文件applicationContext-cfg.xml 中增加下列内容
pool-size="5" 该参数主要解决,多个调度并行的问题,如下图5个task任务,建议设置3--5个调度
如果配置参数为 1,下面5个task任务会依次执行,如果一个时间超出,后面的任务一直在等待,影响业务
使用以上配置后,启动项目就可以定时执行testjobThread方法里面的业务了。
经过测试,spring task里面的方法是被串行执行的,比如上面配置的方法 testjobThread方法,5秒执行一次,如果有一个执行过程时间过长,后面的一次调度一直等上次执行结束后,才会启动下一次调用。
也就是说spring task是会监控 执行方法的主线程,如果主线程未结束的话,下一次就不会执行。
根据业务需求,这个testjobThread里面的 业务,需要多线程执行 (批量抽取数据)
spring框架里面,推荐使用线程池
1)配置线程池
在applicationContext-cfg.xml文件中增加配置如下
2)修改业务操作类为thread类,实现run()方法
添加计数器CountDownLatch ,控制子线程结束后,再结束主线程
注意对象实现@Scope("prototype"),用到了成员变量参数
2)修改job调度的方法为多线程,配置3个线程
执行效果如下:
虽然 testjobThread 5秒执行一次,但是因为使用到了 latch.await() latch.countDown();需要等子线程执行完毕,才会进行下一次job
子线程每次循环,会sleep 20秒,从下面结果看,3个线程 每隔20秒才打印一次。符合最终要求
线程号:29--taskExecutor-3 --test3:---runing--- 0--20170622145500
线程号:28--taskExecutor-2 --test2:---runing--- 0--20170622145500
线程号:27--taskExecutor-1 --test1:---runing--- 0--20170622145500
线程号:28--taskExecutor-2 --test2:---runing--- 1--20170622145520
线程号:27--taskExecutor-1 --test1:---runing--- 1--20170622145520
线程号:29--taskExecutor-3 --test3:---runing--- 1--20170622145520
线程号:29--taskExecutor-3 --test3:---runing--- 2--20170622145540
线程号:28--taskExecutor-2 --test2:---runing--- 2--20170622145540
线程号:27--taskExecutor-1 --test1:---runing--- 2--20170622145540
配置核心参数
直接在application.properties中配置核心参数
创建JavaBean注入
在配置类,或入口类开启@EnableAsync注解
在Service层或Controller层的类或方法上添加@Async注解
继承ThreadPoolTaskExecutor创建新线程池类
配置新建线程池类的核心参数
在配置类,或入口类开启@EnableAsync注解
在Service层或Controller层的类或方法上添加@Async注解,此时需需注意一定要注明Bean方法名称。
spring task和线程池的示例分析的详细内容,希望对您有所帮助,信息来源于网络。