javaWeb監聽器結合定時器實現定時執行任務
阿新 • • 發佈:2018-12-31
java監聽器
通過監聽器可以自動的激發一些操作,比如監聽線上人數;
監聽器介面有:
ServletContextListener——監聽ServletContext物件;
HttpSessionListener——監聽session物件;
ServletRequestListener——監聽request物件;
java監聽器的使用步驟
1.確定監聽的物件,實現對應介面,並重寫介面中的方法;
2.在web.xml中配置該監聽器;
java定時器
在應用中,經常需要定期的執行某個操作,此時利用java定時器,java.util.Timer工具類實現定期執行該任務。
java定時器的使用步驟
1.建立該定時器的類,實現TimerTask介面,重寫run方法,run方法中具體寫該操作;
2.建立Timer物件,呼叫schedule()方法,設定定時執行的規則,包括多久執行一次,具體執行哪個任務;
例子:監聽器與定時器結合週期性執行任務
實現每天早上7點定時執行某任務和每一個小時,每二十分鐘分別執行不同的任務
1.建立監聽器類CrawlListenner
public class CrawlListenner implements ServletContextListener { private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; @Override public void contextInitialized(ServletContextEvent arg0) { Timer timer = new Timer(); CrawlTask task = new CrawlTask(); CrawlDataSumTask dataTask = new CrawlDataSumTask(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 7); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); // 此時要在第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。 if (date.before(new Date())) { calendar.add(Calendar.DAY_OF_MONTH,1); date =calendar.getTime(); } // 定點執行,每隔一天重複的執行 timer.schedule(dataTask, date,PERIOD_DAY); // 隔一段時間執行一次 timer.schedule(task, 0, 1 * 60 * 1000); } @Override public void contextDestroyed(ServletContextEvent arg0) { }
</pre><p><span style="font-size:14px;"></span></p><p><span style="font-size:14px;">2.配置web.xml檔案,新增監聽器</span></p><p><span style="font-size:14px;"></span><pre name="code" class="java"> <listener> <listener-class>com.listenner.CrawlListenner</listener-class> </listener>
3.建立定時器類,繼承TimerTask,重寫run方法,run方法中就是定期執行的任務
<span style="font-size:14px;">//每20分鐘、60分鐘執行一次 public class CrawlTask extends TimerTask { private int count = 0; @Override public void run() { count++; CrawlAllListenner listen = null; if (count % 21 == 0) { listen = new CrawlMasterListenImpl(); } if (count % 61 == 0) { listen = new HbaseDataListenImpl(); } if (listen != null) { listen.crawlListener(); } } }</span>
<span style="font-size:14px;">//每天七點執行 public class CrawlDataSumTask extends TimerTask { @Override public void run() { CrawlAllListenner listen = new HbaseDataListenImpl(); listen.dataSumListenner(); } }</span>