Spring 定时器结合线程池
需求:Spring 定时器结合线程池处理工单
a.定时扫库查出一定数量的需要处理的工单
b.开启线程处理查出的工单
1,创建处理工单的task
@Component("AppWorkOrderTask") @Scope("prototype") public class AppWorkOrderTask implements Runnable {public static final String BEAN_NAME = "AppWorkOrderTask";@Resourceprivate IAppWorkOrderService appWorkOrderService;private String appWorkOrderId;public void execute() {//处理工单逻辑代码}public String getAppWorkOrderId() {return appWorkOrderId;}public void setAppWorkOrderId(String appWorkOrderId) {this.appWorkOrderId = appWorkOrderId;}@Overridepublic void run() {execute();}}
2,创建扫库的定时器
public class AppWorkOrderScheduler extends TimerTask {private Logger logger = Logger.getLogger(AppWorkOrderScheduler.class);@Resourceprivate IAppWorkOrderService appWorkOrderService;@Resource(name = "appWorkOrderTaskExecutor")private ThreadPoolTaskExecutor taskExecutor;@Overridepublic void run() {//判断线程池容量int size = taskExecutor.getMaxPoolSize() - taskExecutor.getActiveCount();if (size > 0) { //找出工单List<String> appWorkOrderIds = appWorkOrderService.getAppWorkOrderList(20);logger.info("Find " + appWorkOrderIds.size() + " task(s) to execute...");for (String appWorkOrderId : appWorkOrderIds) {AppWorkOrderTask task = newTask(appWorkOrderId);taskExecutor.execute(task);}}}private AppWorkOrderTask newTask(String appWorkOrderId) {AppWorkOrderTask task = (AppWorkOrderTask) BeanFactory.getInstance().getBeanByName(AppWorkOrderTask.BEAN_NAME); //从applicationContext 中获取 appWorkOrderTask 公共类就不再贴了task.setAppWorkOrderId(appWorkOrderId);return task;}}
3.配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"default-autowire="byName" default-lazy-init="true"><!--应用工单异步线程执行器--><bean id="appWorkOrderTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><!-- 线程池维护线程的最少数量 --><property name="corePoolSize" value="10"/><!-- 线程池维护线程的最大数量 --><property name="maxPoolSize" value="20"/><!-- 线程池所使用的缓冲队列 --><property name="queueCapacity" value="20" /></bean><bean class="org.springframework.scheduling.timer.TimerFactoryBean" lazy-init="false"><property name="scheduledTimerTasks"><list><ref bean="appWorkOrderScheduledTimerTask" /></list></property></bean><!-- Application WorkOrder Scheduler Timer --><bean id="appWorkOrderSchedulerTask" class="com.test.timer.scheduler.AppWorkOrderScheduler" /><bean id="appWorkOrderScheduledTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"><!-- 运行过程中延时10000ms(10s) --> <property name="delay" value="10000" /><!-- 每隔90s运行一次 --> <property name="period" value="90000" /><property name="timerTask" ref="appWorkOrderSchedulerTask" /></bean></beans>
转载于:https://www.cnblogs.com/china2k/p/4049897.html
Spring 定时器结合线程池相关推荐
- 你也被Spring的这个“线程池”坑过吗?
前两天一个晚上,正当我沉浸在敲代码的快乐中时,听到隔壁的同事传来一声不可置信的惊呼:线程池提交命令怎么可能会执行一秒多? 线程池提交方法执行一秒多?那不对啊,线程池提交应该是一个很快的操作,一般情况下 ...
- spring提供的线程池
SPRING中的线程池ThreadPoolTaskExecutor 分类: JAVA Spring2013-07-12 10:36 14896人阅读 评论(9) 收藏 举报 Spring线程池多线程 ...
- 自定义spring kafka consumer 线程池
序 本文讲述一下如何自定义spring kafka的consumer线程池 KafkaMessageListenerContainer spring-kafka-1.2.3.RELEASE-sourc ...
- Spring Boot 配置线程池使用多线程插入数据
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~个人原创+1博客:点击前往,查看更多 来源:h ...
- spring async 默认线程池_springboot:异步调用@Async
在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规 ...
- Spring Boot系列二 Spring @Async异步线程池用法总结
转载 自 https://blog.csdn.net/hry2015/article/details/67640534 1. TaskExecutor Spring异步线程池的接口类,其实质是java ...
- Spring Boot笔记-线程池调度计划仅运行一次
这里是有这样的一个需求,启动spring boot后用一个新线程,跑一次就可以了,首先是线程池申请和配置: @Configuration @EnableAsync public class Async ...
- 线程的创建 锁 Threading模块 事件 条件 定时器 队列 线程池 回调函数
线程的创建: 创建线程的方式1: from threading import Thread import time def sayhi(name):time.sleep(2)print('%s say ...
- 网络编程9_线程-条件,定时器,队列,线程池, 协程
线程 一. 条件 使得线程等待,只有满足某条件时,才释放n个线程 import time from threading import Thread,RLock,Conditio ...
最新文章
- 上网行为管理产品选型简单考量
- php分布式微服务开发_分布式微服务架构
- VPC2007差分硬盘让小硬盘也能跑多个虚拟机
- PhotoShop基础知识
- mysql设置本机可被访问_怎么设置MySQL就能让别人访问本机的数据库了?
- 计算机中音乐设备数字接口,多媒体cai课件制作技术复习题
- vmware实现小型局域网实验环境
- MSMQ突破4M限制的方法
- Vue基础应用-实现计数器
- Vivado的下载和安装
- 物联网专业要学c语言吗,物联网应用技术专业是文科还是理科
- 学习3D游戏建模有哪些好的书籍教材?0基础如何开始
- 如何知道qq号手机号后三位_知道位
- 微信小程序文字跑马灯效果
- [转] 理解Web路由
- Metacat实现原理解析
- 快钱 支付 php,GitHub - laraveler/omnipay-99bill: 基于Omnipay的快钱支付SDK
- YourKit Java Profiler2014剖析远程服务器(可以搞定liniux的jetty)
- VR入门-02(在场景中显示出手)
- 复选框如何实现单选框效果