java web 的每天定时任务不反应
如题,我在一个java web项目里需要做一个定时器,定时器的作用是每天凌晨零时把数据库上的某个表的某个字段的值设重置为0.
我在网上找了一些资料,按照http://blog.csdn.net/x6582026/article/details/52955159这个博客上的代码放到我的项目里(修改了时间)。启动项目后我修改我电脑的时间(本地测试,数据库、Tomcat都在本地)到当天23:59,等到了凌晨零时,但是发现数据库中的表的数据并没有被重置,控制台也没打印信息(修改数据库字段信息我设了打印信息的)。
求大神教教我怎么弄这个定时器。谢谢了!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
不需要那么麻烦,在数据库中也可以做定时器来实现的:
create event event_test
on schedule EVERY 1 DAY STARTS '2016-11-23 00:00:00'
on completion preserve enable
do
update table set columna=0;
参考自:
mysql 定时任务 event
有可能是你定时任务线程报异常了,你没有catch。就不会再执行了。
因为是用Timer,建议阅读一下Timer的源码以及实现的机制(TimerThread)。概括的说一下原因,TimerThread的他并不是时时刻刻都在检查是否触发,而是在第一次检查之后,线程会wait一段时间(目前最近的一个task的触发时间减当前时间)。在线程开始wait之后,修改系统时间是不能让线程恢复执行的。所以你要测试的话,最好是先改系统时间,再启动项目。
一般系统定时任务的执行时间点应该避开时间变更操作(比如ntp对时服务执行时间点),统计类的定时任务也需要适当避开统计边界。
一般来说,这种需求需要考虑用quartz来实现会更合适,另外即使要用JDK原生类实现,也应该考虑使用ScheduledExecutorService而不是Timer(Timer内一旦发生未捕获异常,线程会退出,以后的定时任务都不会再执行);写个简单的Application,使用操作系统的定时任务来调用也是一种简单有效的方式。
jsp+servlet+mybatis,没其他框架,项目比较小,就不想去集成那些框架了,很多用不到,麻烦。
回复
这样的话就那就得在考虑其他的了,我也坐等答案~
不知道楼主用的是什么框架,我记得在Spring中有个定时器的设置,在你设置的时间触发即可,具体的你可以百度下,本地也是可以设置测试的。
把代码触发时间设置靠近本地时间是可以触发,但是把本地世间设置靠近代码触发世间他就不可以了。
本地测试,你把代码里触发时间设置成近点的时间,加个断点调试下。