Javaweb 定時(shí)器功能代碼實(shí)例
在Java的6.0版本中新增了concurrent包,這個(gè)包是用作線程同步的包,提供了很多工具類。
其中定時(shí)器就是其中之一。近期在做一個(gè)項(xiàng)目,在項(xiàng)目中要實(shí)現(xiàn)啟動(dòng)Web服務(wù)的同時(shí)啟動(dòng)一個(gè)任務(wù),要求此任務(wù)為守護(hù)進(jìn)程,定時(shí)調(diào)用一些任務(wù)操作代碼。在網(wǎng)上搜索相關(guān)的實(shí)現(xiàn),綜合考慮得出一個(gè)解決方案。方案是:使用tomcat服務(wù)器的監(jiān)聽器類作守護(hù)進(jìn)程,調(diào)用concurrent包提供的定時(shí)器,最后在定時(shí)器中調(diào)用操作實(shí)現(xiàn)代碼。具體實(shí)現(xiàn)類Translator在這里不再給出,將其替換為自己需要的實(shí)現(xiàn)類即可。
1.任務(wù)類
import java.util.TimerTask; import javax.servlet.ServletContext; public class MyTask extends TimerTask{ private ServletContext context = null; public CleanTpIpTask(ServletContext servletContext) { this.context = servletContext; } @Override public void run() { //定時(shí)任務(wù)邏輯代碼 } }
2.監(jiān)聽類
import java.util.Calendar; import java.util.Date; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyTaskListener implements ServletContextListener { private java.util.Timer timer = null; MyTask myTask = null; public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); } public void contextInitialized(ServletContextEvent arg0) { Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); c.set(year, month, day, 3, 0, 0);//項(xiàng)目啟動(dòng)當(dāng)天凌晨3點(diǎn)執(zhí)行1次,如果已經(jīng)超過凌晨3點(diǎn),立刻執(zhí)行 Date date = c.getTime(); timer = new java.util.Timer(true); int period = 24 * 60 * 60 * 1000;//執(zhí)行間隔 if(myTask==null){ myTask = new MyTask(arg0.getServletContext()); timer.schedule(new MyTask(arg0.getServletContext()), date, period); //timer.schedule(new CleanTpIpTask(arg0.getServletContext()), date);//只執(zhí)行1次 //timer.schedule(new CleanTpIpTask(arg0.getServletContext()), 0, period);//項(xiàng)目啟動(dòng)立刻執(zhí)行,每隔period 毫秒執(zhí)行1次 } } }
3.在web.xml中配置
<listener> <listener-class>webservice.MyTaskListener</listener-class> </listener>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java簡(jiǎn)單實(shí)現(xiàn)定時(shí)器
- windows定時(shí)器配置執(zhí)行java jar文件的方法詳解
- java 定時(shí)器線程池(ScheduledThreadPoolExecutor)的實(shí)現(xiàn)
- Java線程Timer定時(shí)器用法詳細(xì)總結(jié)
- Java自帶定時(shí)任務(wù)ScheduledThreadPoolExecutor實(shí)現(xiàn)定時(shí)器和延時(shí)加載功能
- 輕松實(shí)現(xiàn)Rxjava定時(shí)器功能
- 基于Rxjava實(shí)現(xiàn)輪詢定時(shí)器
- Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的定時(shí)器代碼解析
- Java定時(shí)器Timer使用方法詳解
- Java 定時(shí)器的多種實(shí)現(xiàn)方式
相關(guān)文章
在IDEA啟動(dòng)多個(gè)Spring Boot工程實(shí)例
這篇文章主要介紹了在IDEA啟動(dòng)多個(gè)Spring Boot工程實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01spring boot實(shí)現(xiàn)上傳圖片并在頁面上顯示及遇到的問題小結(jié)
最近在使用spring boot搭建網(wǎng)站的過程之中遇到了有點(diǎn)小問題,最終解決方案是在main目錄下新建了一個(gè)webapp文件夾,并且對(duì)其路徑進(jìn)行了配置,本文重點(diǎn)給大家介紹spring boot實(shí)現(xiàn)上傳圖片并在頁面上顯示功能,需要的朋友參考下吧2017-12-12Spring Cloud Eureka 服務(wù)上下線監(jiān)控的實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Eureka 服務(wù)上下線監(jiān)控的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09Spring Boot 集成 Kafkad的實(shí)現(xiàn)示例
這篇文章主要介紹了Spring Boot 集成 Kafkad的示例,幫助大家更好的理解和學(xué)習(xí)使用Spring Boot框架,感興趣的朋友可以了解下2021-04-04Java使用cxf發(fā)布及調(diào)用webservice接口的方法詳解
今天小編就為大家分享一篇關(guān)于Java使用CXF發(fā)布及調(diào)用WebService接口的方法,文中通過代碼示例給大家介紹的非常詳細(xì),具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2023-08-08Java設(shè)計(jì)模式之裝飾者模式詳解和代碼實(shí)例
這篇文章主要介紹了Java設(shè)計(jì)模式之裝飾者模式詳解和代碼實(shí)例,Decorator模式(別名Wrapper):動(dòng)態(tài)將職責(zé)附加到對(duì)象上,若要擴(kuò)展功能,裝飾者提供了比繼承更具彈性的代替方案,需要的朋友可以參考下2014-09-09SpringBoot redis分布式緩存實(shí)現(xiàn)過程解析
這篇文章主要介紹了SpringBoot redis分布式緩存實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10