JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 如何让java定时器随Web应用一起启动?
fsolsh





發文: 12
積分: 0
於 2010-06-03 10:21 user profilesend a private message to usersend email to fsolshreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
遇到一个问题,一个b/s的应用中,需要定时做一些任务,鉴于servlet的一些特点(容器自动加载、实例化等),设计思路如下:
一个servlet类初始化时生产Timer实例并添加TimerTask任务

写了一个定时器任务
1
public class MyTimerTask extends TimerTask{}


其中的run方法如下:
1
2
3
4
5
6
7
8
9
public void run() {
  synchronized (this) {
    try {
      dosomething;
    } catch (Exception ex) {
      System.out.println(ex.getMessage().toString());
    }
  }
}


写了一个加载定时器任务的servlet
1
public class LoadTimerTasks extends HttpServlet{}


1
2
3
4
5
LoadTimerTasks中init方法
public void init() throws ServletException {
  this.timer = new Timer();//生产定时器实例
  this.addJobs();//加载定时器任务
}


1
2
3
4
5
6
public void addJobs() {
  // add your timertask here
  myTimerTask = new MyTimerTask();
  //为了测试方便1分钟执行一次,首次执行时间设定为当前系统时间
  timer.schedule(myTimerTask, new Date(), 60 * 1000);
}


现象:服务启动很久,也不见dosomething;在LoadTimerTasks的init方法添加了
1
System.out.println("===Servlet Init===");
也不见控制台的print语句,可见servlet根本没有被初始化。

问题:servlet是由web容器负责加载、实例化并调用init()方法初始化的,这里为何没有初始化?如何才能让java定时器随应用一起启动?


reply to postreply to post
BaoSight-KwanSee
» JWorld@TW »  Java SE 討論區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8