java中在定时器,定时每周一定时执行某个任务,必须在周一重新启动了服务,该任务就会在指定的时间点执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中在定时器,定时每周一定时执行某个任务,必须在周一重新启动了服务,该任务就会在指定的时间点执行相关的知识,希望对你有一定的参考价值。
Date date=new Date(System.currentTimeMillis());
Calendar cd=Calendar.getInstance();
cd.setTime(date);
Timer timer = new Timer( true );
cd.set(cd.get(Calendar.YEAR), cd.get(Calendar.MONTH),cd.get(Calendar.DATE), 12, 12, 12);
timer.schedule(new OrderWeekTask(cd,"month"), cd.getTime());
我使用的是TOMCAT的服务器,TOMCAT一直起动着,但在指定的时间上该任务不执行,
只有重新启动该服务器他才会执行,我觉得很奇怪,我觉得这样太麻烦了,每次任务执行前要重新启动tomcat一次太麻烦了,我不晓得代码,哪里有问题,谢谢大家的帮助!
并不需要在Java做的那么复杂。
Windows服务器也有类似于cron的任务管理功能,同理
--------------------------->
Tomcat不是用来管理定时任务的,如果没有HTTP请求,Servlet是不会被执行的。
建议lz把定期执行的处理做成一个独立的Java程序,用cron执行。
如果不想写独立的Java程序,也可以用cron定期向Tomcat发送Http请求,但是,这样做的话注意程序处理时间不能太长,因为HTTP通信有timeout的制约。 参考技术A 不启动服务不可能执行任务。只能一直在后台运行这个服务或者用系统功能定时启动这个服务
spring中定时器每周执行两次
spring中定时器每周执行两次,如果本身代码没有问题,怀疑跟服务器的环境有关。查看服务器上的 $your_tomcat_path/conf/server.xml 文件, 同时配置了 appBase=“webapps” 和 docBase=“YourApp”,而我自己的应用是放置在 webapps/YourApp 下面的。这样配置后,相当于在 tomcat 启动时加载了两个应用。所以会出现定时任务被执行两次,而定时任务执行时,对象内的状态是不一样的。 参考技术A 原因:如果spring-quartz.xml文件,在Spring的配置文件spring-config.xml中被加载,那么定时任务会被Spring和SpringMVC扫描两次,所以会被执行两次。
解决办法:把spring-quartz.xml文件放在web.xml文件中加载。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-config.xml,classpath:spring-quartz.xml</param-value>
</context-param>
以上是关于java中在定时器,定时每周一定时执行某个任务,必须在周一重新启动了服务,该任务就会在指定的时间点执行的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 共享模式之工具 ThreadPoolExecutor -- 线程池应用之定时任务(在每周周四执行定时任务)