需求: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 定时器结合线程池相关推荐

  1. 你也被Spring的这个“线程池”坑过吗?

    前两天一个晚上,正当我沉浸在敲代码的快乐中时,听到隔壁的同事传来一声不可置信的惊呼:线程池提交命令怎么可能会执行一秒多? 线程池提交方法执行一秒多?那不对啊,线程池提交应该是一个很快的操作,一般情况下 ...

  2. spring提供的线程池

    SPRING中的线程池ThreadPoolTaskExecutor 分类: JAVA Spring2013-07-12 10:36 14896人阅读 评论(9) 收藏 举报 Spring线程池多线程 ...

  3. 自定义spring kafka consumer 线程池

    序 本文讲述一下如何自定义spring kafka的consumer线程池 KafkaMessageListenerContainer spring-kafka-1.2.3.RELEASE-sourc ...

  4. Spring Boot 配置线程池使用多线程插入数据

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~个人原创+1博客:点击前往,查看更多 来源:h ...

  5. spring async 默认线程池_springboot:异步调用@Async

    在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规 ...

  6. Spring Boot系列二 Spring @Async异步线程池用法总结

    转载 自 https://blog.csdn.net/hry2015/article/details/67640534 1. TaskExecutor Spring异步线程池的接口类,其实质是java ...

  7. Spring Boot笔记-线程池调度计划仅运行一次

    这里是有这样的一个需求,启动spring boot后用一个新线程,跑一次就可以了,首先是线程池申请和配置: @Configuration @EnableAsync public class Async ...

  8. 线程的创建 锁 Threading模块 事件 条件 定时器 队列 线程池 回调函数

    线程的创建: 创建线程的方式1: from threading import Thread import time def sayhi(name):time.sleep(2)print('%s say ...

  9. 网络编程9_线程-条件,定时器,队列,线程池, 协程

    线程 一. 条件     使得线程等待,只有满足某条件时,才释放n个线程     import time     from threading import Thread,RLock,Conditio ...

最新文章

  1. 上网行为管理产品选型简单考量
  2. php分布式微服务开发_分布式微服务架构
  3. VPC2007差分硬盘让小硬盘也能跑多个虚拟机
  4. PhotoShop基础知识
  5. mysql设置本机可被访问_怎么设置MySQL就能让别人访问本机的数据库了?
  6. 计算机中音乐设备数字接口,多媒体cai课件制作技术复习题
  7. vmware实现小型局域网实验环境
  8. MSMQ突破4M限制的方法
  9. Vue基础应用-实现计数器
  10. Vivado的下载和安装
  11. 物联网专业要学c语言吗,物联网应用技术专业是文科还是理科
  12. 学习3D游戏建模有哪些好的书籍教材?0基础如何开始
  13. 如何知道qq号手机号后三位_知道位
  14. 微信小程序文字跑马灯效果
  15. [转] 理解Web路由
  16. Metacat实现原理解析
  17. 快钱 支付 php,GitHub - laraveler/omnipay-99bill: 基于Omnipay的快钱支付SDK
  18. YourKit Java Profiler2014剖析远程服务器(可以搞定liniux的jetty)
  19. VR入门-02(在场景中显示出手)
  20. 复选框如何实现单选框效果

热门文章

  1. iPhone黑屏幕转圈圈(解决办法)
  2. 将米转换为度(经纬度) 画圆上下多出来一些区域
  3. oracle中创建表的自增ID
  4. 韭菜财经大数据:《2019年内容创业市场报告》
  5. 织梦(安装,模板,基本标签)
  6. 全息营销话题提纲(2-1)--王甲佳全息营销系列15
  7. 使用firefox44版本,弃用chrome
  8. 如何在winform或者wpf里面打开浏览器并设置宽高位置
  9. MS DOS 命令大全
  10. python网球比赛模拟_【Python】以模块化做比赛模拟