编程开发 购物 网址 游戏 小说 歌词 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
移动开发 架构设计 编程语言 互联网 开发经验 Web前端 开发总结
开发杂谈 系统运维 研发管理 数据库 云 计 算 Java开发
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
  编程开发知识库 -> 开发经验 -> spring boot确认在tomcat中cron定时器无法退出 -> 正文阅读
 

[开发经验]spring boot确认在tomcat中cron定时器无法退出[第1页]

摘要: spring boot下确认cron定时器无法退出

```
@Component
public class TestScheduler {

	@Scheduled(cron = "0 0 4 * * ?")
	public void test() {
		System.out.println("hello, test...");
	}
	
	@Scheduled(fixedDelay=5000)
	public void test2() {
		System.out.println("tets....");
	}
}
```
上面是测试用的定时器,简单新建一个spring boot项目,然后加入上面的定时器代码是测试不出来的,因为默认spring boot下的定时器是单线程,而且在App退出时立即shutdown定时器线程,不等待线程执行结束。

```
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
	
	@Override
	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
		taskRegistrar.setScheduler(taskExecutor());
	}
	
	@Bean(destroyMethod="shutdown", name="taskScheduler")
    public Executor taskExecutor() {
		ThreadPoolTaskScheduler scheduledExecutorService = new ThreadPoolTaskScheduler();
		scheduledExecutorService.setPoolSize(10);
		scheduledExecutorService.setWaitForTasksToCompleteOnShutdown(true);
		scheduledExecutorService.setAwaitTerminationSeconds(5);
		return scheduledExecutorService;
    }

}
```
改为使用线程池,并且设置等待TASK线程执行结束,设置最大等待时间,然后发布到tomcat后,就无法正常shutdown tomcat了,必须强制kill。其实在tomcat shutdown时,定时器线程池中的线程已经不再执行,只是不知为何无法退出,看到stackoverflow上也有人遇到类似问题,但没有人回答。经测试,如果去掉cron定时器就又可以正常shutdown。

目前产品业务上使用redis作为简单消息队列,如果直接强制kill tomcat进程,可能导致redis队列的数据丢失,目前部署使用的脚本是等待20s,如果进程还在,则强制kill,这样可以尽可能的保证在kill之前,定时器的线程执行结束。

其实这里如果使用kafka、activeMQ之类的消息队列产品就没问题了,因为这些产品都支持事务处理,如果在commit之前强制kill,这些数据就还在队列中并不会丢失。不过,目前产品部署在AWS中,AWS自身没有kafka,自建的话由于产品量级不到又显得多余,AWS有类似kafka的kinesis,但是本地开发没有环境,麻烦。

所以,目前正在整理redis的另一个方案,消息队列的安全模式,下次再写。

  开发经验 最新文章
Java 9 中的 GC 调优基础
Java9之HttpClientAPI实战详解
TeamFlowy——结合Teambition与Workflowy
深度思考Spark Runtime机制
jQuery实现放大镜效果
疯狂Spring Cloud连载(六)——负载均衡框
JavaWeb学习总结——JavaMail发送邮件
GZIP压缩解压类
git常用命令
appach 和tomcat 之间的关系(1)
上一篇文章      下一篇文章      查看所有文章
加:2017-08-08 13:04:11  更:2017-08-08 13:07:57 
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年9日历
2018-9-21 19:55:35
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程开发知识库