2010-05-17 64 views
1

我有下一個任務:例如,我需要將相同的文件加載到我的網絡應用程序中,例如 - 每天兩次!假設在那個文件中我有信息,這種變化,我需要加載這個信息到我的應用程序來更改統計信息,例如。如何在一定時間內將文件加載到Web應用程序中?

如何加載文件多次(一小時兩次,或一天兩次)? 我應該使用什麼?有任何算法來做到這一點?

我不允許使用Quartz Scheduler等外部庫。所以我需要用Thread和/或Timer來做。任何人都可以給我一些例子或算法怎麼做。我可以在哪裏創建入口點到我的線程,我可以在託管bean中執行它,還是需要某種過濾器/偵聽器/ servlet。我使用jsf和richFaces。也許在這個技術中有一些算法來解決我的問題。

任何想法?

非常感謝您的幫助!

回答

2

如果您不能使用調度程序,那麼請使用servlet和Timer。

this article中描述瞭如何做到這一點。這正是你需要的。

0

我會用Quartz Scheduler。我不知道你的應用程序的體系結構,所以我不能確定Spring配置或者代碼配置是否更好。如果您想要更具表現力的時間安排,您可以使用SimpleTrigger,甚至可以使用CronTrigger。

0

什麼,我會暴露切入點,以「負載」的功能在你的webapp一個servlet,然後使用外部調度程序(在Unix上的cron,計劃任務在Windows )通過wget或任何其他命令行http客戶端調用該servlet。

這種方法具有不依賴於任何第三方庫的優點(僅爲一項任務添加Qurtz似乎對我來說過於矯枉過正),並且還具有更改日程安排的靈活性,而無需觸摸代碼以及根據需要手動觸發「加載」 。

0

感謝所有幫助 - 我做這個任務用定時器,TimerTask的幫助和的ServletContextListener:

 servletContext = event.getServletContext(); 

     // create the timer and timer task objects 
     Timer timer = new Timer(); 
     // get a calendar to initialize the start time 
     Date startTime = Calendar.getInstance().getTime(); 

     List<Company> companies = CompanyUtils.getInstance().getCompanies(); 
     if (companies.size() == 0) 
      return; 

     for (int i = 0; i < companies.size(); i++) 
     { 
      FileUpdater task = new FileUpdater(companies.get(i).getUrl()); 

      // schedule the task to run hourly 
      timer.scheduleAtFixedRate(task, startTime, companies.get(i).getUpdatePeriod()); 
     } 

     // save our timer for later use 
     servletContext.setAttribute("timer", timer); 

再次感謝!

祝好!

相關問題