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>
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java簡單實(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è)簡單的定時(shí)器代碼解析
- Java定時(shí)器Timer使用方法詳解
- Java 定時(shí)器的多種實(shí)現(xiàn)方式
相關(guān)文章
SMBMS超市訂單管理系統(tǒng)的網(wǎng)站源碼
這篇文章主要介紹了SMBMS超市訂單管理系統(tǒng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05
Spring注解@Configuration和@Component區(qū)別詳解
@Component和@Configuration都可以作為配置類,之前一直都沒覺得這兩個(gè)用起來有什么差別,可能有時(shí)程序跑的和自己想的有所區(qū)別也沒注意到,下面這篇文章主要給大家介紹了關(guān)于Spring注解@Configuration和@Component區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-04-04
詳解Java?ReentrantLock可重入,可打斷,鎖超時(shí)的實(shí)現(xiàn)原理
前面講解了ReentrantLock加鎖和解鎖的原理實(shí)現(xiàn),但是沒有闡述它的可重入、可打斷以及超時(shí)獲取鎖失敗的原理,本文就重點(diǎn)講解這三種情況,需要的可以了解一下2022-10-10
SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例
本文將結(jié)合實(shí)例代碼,介紹SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
java導(dǎo)出csv方法實(shí)現(xiàn)講解
這篇文章主要介紹了java導(dǎo)出csv的方法,客戶要求在項(xiàng)目中有導(dǎo)出CSV文件的功能,并且給出了如何在不知道如何在不知道對(duì)象類型(沒有應(yīng)用泛型)的List中如何得到對(duì)象的屬性值,下面就詳細(xì)說下這個(gè)功能是如何實(shí)現(xiàn)的2013-12-12
MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach
這篇文章主要介紹了MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Java8 Collectors求和功能的自定義擴(kuò)展操作
這篇文章主要介紹了Java8 Collectors求和功能的自定義擴(kuò)展操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
減小Maven項(xiàng)目生成的JAR包體積實(shí)現(xiàn)提升運(yùn)維效率
在Maven構(gòu)建Java項(xiàng)目過程中,減小JAR包體積可通過排除不必要的依賴和使依賴jar包獨(dú)立于應(yīng)用jar包來實(shí)現(xiàn),在pom.xml文件中使用<exclusions>標(biāo)簽排除不需要的依賴,有助于顯著降低JAR包大小,此外,將依賴打包到應(yīng)用外,可減少應(yīng)用包的體積2024-10-10
Springboot AOP對(duì)指定敏感字段數(shù)據(jù)加密存儲(chǔ)的實(shí)現(xiàn)
本篇文章主要介紹了利用Springboot+AOP對(duì)指定的敏感數(shù)據(jù)進(jìn)行加密存儲(chǔ)以及對(duì)數(shù)據(jù)中加密的數(shù)據(jù)的解密的方法,代碼詳細(xì),具有一定的價(jià)值,感興趣的小伙伴可以了解一下2021-11-11

