如何配置 “定时自动运行servlet”

马行空牛耕田 2004-10-25 04:41:22
系统环境:
OS : unix / windows
Server : webspere 5.0
tech :struts , hibernate ,ejb

想让一个servlet定时自动运行,做一些后台处理,可否配置?如何配置?
...全文
363 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
马行空牛耕田 2004-10-27
  • 打赏
  • 举报
回复
准备结贴了,哪位还有高见,在下洗耳恭听,否则今天下午5点结贴!
马行空牛耕田 2004-10-26
  • 打赏
  • 举报
回复
再up一下 :)
马行空牛耕田 2004-10-26
  • 打赏
  • 举报
回复
thanks to ChDw(米)

我明白了,其实API文档里都有,但我没有认真去看,想不到java已经把这个问题解决的很好了,呵呵!
ChDw 2004-10-26
  • 打赏
  • 举报
回复
schedule 是表示保证上一次任务结束和下一次的启动时间间隔固定
scheduleAtFixRate才是保证上一次任务启动和下一次的启动时间间隔固定,如果超过了会马上执行的
马行空牛耕田 2004-10-26
  • 打赏
  • 举报
回复
thanks for all!

继续讨论: timer的线程安全问题

如果我的task执行时间超过的delay的时间,会出现什么情况? 会不会前一个task还没有结束,后一个task又接着继续,我不希望这样,可否使用同步来解决?
马行空牛耕田 2004-10-26
  • 打赏
  • 举报
回复
OK,我成功了!

1、我认为是我的<load-on-startup> 和前面的一个servlet配置的一样,都是1,重复了,导致该servlet没有自动加载;
2、timer.schedule(yourTask, 0, 5000); 正确,而timer.schedule(yourTask,5000); 不正确。前者是重复一个时间断后执行,而后者只是定位到5秒后执行,不重复!
zlhlj2000 2004-10-26
  • 打赏
  • 举报
回复
<servlet>
<servlet-name>Timer</servlet-name>
<servlet-class>yourpckage.timerServlet<servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
public void init() throws ServletException {
super.init();
timerTask yourTask= new timerTask();
Timer timer = new Timer();
timer.schedule(yourTask, 0, 5000);

}
public static class timerTask extends TimerTask {// your task
}
Tasia 2004-10-26
  • 打赏
  • 举报
回复
服务器启动和启动后一直运行
写一个servlet,该servlet什么访问都不接受,并且是服务器启动加载的。
在servlet的init方法中启动线程,该线程负责定期执行。
服务器提前加载的配置为:
<servlet>
<servlet-name>deleteMessage</servlet-name>
<servlet-class>servlet.DeleteMessagerFileThread </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
其中load-on-startup配置的数字为启动顺序,其它的跟普通servlet相同


package system;

public class DeleteMessagerFileThread extends Thread {

public DeleteMessagerFileThread() {
}

public void run() {
try {
do {
//do something
System.out.println("开始删除过期短消息及期附件....");
UserMessage.autoDeleteMessagerAndAccessary();
//sleep(60 * 1000);这儿写的是2小时
sleep(2 * 60 * 60 * 1000);
} while (true);
} catch (Exception e) {
}
}
}
dlxu 2004-10-26
  • 打赏
  • 举报
回复
用Thread.sleep(10000),然后重新执行一次Servlet就是
sailingaway 2004-10-25
  • 打赏
  • 举报
回复
ChDw(米)
能不能说详细些,最好有个样例,我是低手这样看不太直观,不要嫌弃我,帮忙解释详细些
马行空牛耕田 2004-10-25
  • 打赏
  • 举报
回复
up一下!
ChDw 2004-10-25
  • 打赏
  • 举报
回复
你在web.xml中对该servlet加上load-on-startup

然后在init方法中使用java.util.Timer来实现定时任务
马行空牛耕田 2004-10-25
  • 打赏
  • 举报
回复
呵呵,不用关注了,在google上一查一大把的解决方案,唉,浪费88分。

不过大家可以把自己知道的方案发上来啊,分照给,说不定还能入选精华贴呢,^_^
边城狂人 2004-10-25
  • 打赏
  • 举报
回复
GZ

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧