想起写定时任务,很多码农都第一时间想起quartz。当然本人平时定时任务定时任务的时候也是用quartz,因为实用简单。最近在写项目的时候遇到一个问题。因为项目的限制性和保密协议,只能说不能再pom.xml文件加上包的引用。所以是无法使用quartz定时任务了。当时第一时间就想起使用java.util包下的TIMER定时器来执行定时任务。
先说timer定时器的使用,非常简单。
1、写一个bean,bean里面写个run方法(方法名随意),init-method 指定run方法,配置到spring里面,在spring启动时执行run方法,
例子如下:
delay是延迟执行的时间,period是执行之后周期性的执行定时任务。
很简单很好用,而且不用加引用包。
问题1,这里提出来与大家一起分享,使用timer定时器来执行定时任务有个问题:
多线程定时处理定时任务时,timer运行多个timerTask,只要其中一个没有捕获抛出的异常,所有的定时任务便会终止。
这个问题好严重!!!!
解决方法:
使用java.util.concurrent.包下的ScheduledExecutorService,可以解决timer定时器问题
这个大家很熟悉了吧!
其他配置不变,直接更改run方法:
能避免timer的异常导致的问题,而且还可以设置时间单位,确实比timer好多了