日期:2014-05-17  浏览次数:20663 次

Java的Timer定时执行问题
<listener>
    <listener-class>com.jackie.train.util.MessageTaskListener</listener-class>
</listener>
想定时执行一个任务,在指定的时间点执行。
tomcat启动以后,以前配置的时间点,到了以后会执行。如果新增一个任务,或者修改了时间点,为什么不执行了呢?

怎么才能动态执行呢?

------解决方案--------------------
在java里面,schedule(TimerTask task, Date firstTime, long period) 这个函数你用对了么
可以参看下这个帖子http://blog.csdn.net/yanmei_yao/article/details/8131282 
------解决方案--------------------
引用:
比如在这样的时间点去执行任务:2013-12-30 10:10,tomcat启动以后,到时间了他会执行。修改这个时间点以后,到那个时间以后,就不执行。

Could you tell me where your time configuration is placed? If you put time configuration in some file instead of memory, when you update this file,you have to restart your tomcat to make it effective unless your program can automatically load the latest content of that file.
------解决方案--------------------
If your program always reads directly the configuration file every time rather than read once to memory,the scenario I mentioned just now is nonexistent.
------解决方案--------------------
timer.schedule(timerTask, 1*60*1000, 10*60*1000);
之前自己写的一个定时器 用在tomcat 启动后 一分钟后 自动获取数据的。
所有的奥秘都在这一个函数中!
------解决方案--------------------
重点就在于你配置的时间属性是不是实时去读取的
------解决方案--------------------
引用:
Quote: 引用:

重点就在于你配置的时间属性是不是实时去读取的


怎么实时读取?

按你的意思是说在修改了时间以后就不执行了,那么你配置在配置文件的时间属性是在服务初始化的时候读到内存了,也就是说就算你修改了配置文件的时间属性,这个时间在内存里面还是没变
------解决方案--------------------
引用:
Quote: 引用:

timer.schedule(timerTask, 1*60*1000, 10*60*1000);
之前自己写的一个定时器 用在tomcat 启动后 一分钟后 自动获取数据的。
所有的奥秘都在这一个函数中!


这是什么意思呢?

自己看看关于Timer类schedule 的api啊 
你之前都执行成功了,肯定也用到了这个函数了吧!
------解决方案--------------------
<listener>只有tomcat启动的时候才会调用吧,而且只调用一次。之后还想调用只能在重启了。你可以把时间配置写在一个文件或者数据库里,然后只需要修改文件或数据库就行了,timer每次都是从文件或数据库里读配置。手动启动的会啊也可以啊,创建一个jsp上面加个按钮之类的,然后到servlet里启动就行。不过那个timer必须是同一个才行。