欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Java Web項(xiàng)目中添加定時(shí)任務(wù)的方法

 更新時(shí)間:2018年01月21日 12:33:40   作者:東窗凝殘?jiān)? 
在Java Web程序中加入定時(shí)任務(wù),這里介紹兩種方式使用監(jiān)聽器注入,使用Spring注解@Scheduled注入,需要的朋友可以參考下

在Java Web程序中加入定時(shí)任務(wù),這里介紹兩種方式:1.使用監(jiān)聽器注入;2.使用Spring注解@Scheduled注入。

推薦使用第二種形式。

一、使用監(jiān)聽器注入

①:創(chuàng)建監(jiān)聽器類:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TimerDataTaskListener implements ServletContextListener {
 
 @Override
 public void contextInitialized(ServletContextEvent servletContextEvent) {
  new TimerManager();
 }
 
 @Override
 public void contextDestroyed(ServletContextEvent servletContextEvent) {

 }
}

②:創(chuàng)建定時(shí)任務(wù)類:

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

public class TimerManager {
 //時(shí)間間隔:24h
 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
 public TimerManager() {
  Calendar calendar = Calendar.getInstance();

  //定制每日12:30:30執(zhí)行
  calendar.set(Calendar.HOUR_OF_DAY, 12);
  calendar.set(Calendar.MINUTE, 30);
  calendar.set(Calendar.SECOND, 30);

  Date date = calendar.getTime();  //第一次執(zhí)行定時(shí)任務(wù)的時(shí)間
  //如果當(dāng)前時(shí)間已經(jīng)過去所定時(shí)的時(shí)間點(diǎn),則在第二天時(shí)間點(diǎn)開始執(zhí)行
  if (date.before(new Date())) {
   date = this.addDay(date, 1);
  }
  Timer timer = new Timer();
  TimerTaskService task = new TimerTaskService();
  //安排指定的任務(wù)在指定的時(shí)間開始進(jìn)行重復(fù)的固定延遲執(zhí)行。
  timer.schedule(task, date, PERIOD_DAY);
 }

 // 增加或減少天數(shù)
 private Date addDay(Date date, int num) {
  Calendar startDT = Calendar.getInstance();
  startDT.setTime(date);
  startDT.add(Calendar.DAY_OF_MONTH, num);
  return startDT.getTime();
 }
}

③:創(chuàng)建TimerTask類:

import java.util.TimerTask;

public class TimerTaskService extends TimerTask {

 @Override
 public void run() {
  try {
   //要執(zhí)行的任務(wù)邏輯寫在這里
   System.out.println("插入密碼成功!");
  } catch (Exception e) {
   System.out.println("插入密碼失敗!");
  }
 }
}

④:在web.xml注冊(cè)監(jiān)聽器

<!-- TimerDataTaskListener 監(jiān)聽器 -->
 <listener>
  <listener-class>com.jsiqi.resume.service.TimerDataTaskListener</listener-class>
 </listener> 

二、使用spring注解注入

我項(xiàng)目的框架是Spring + SpringMVC + Mybatis

代碼示例:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class TimerTask {
 
 @Scheduled(cron="*/30 * * * * *") // 間隔30秒執(zhí)行
 public void test(){
  try {
   //要執(zhí)行的任務(wù)邏輯寫在這里
   System.out.println("插入密碼成功!");
  } catch (Exception e) {
   System.out.println("插入密碼失?。?);
  }
 }
}

關(guān)于定時(shí)時(shí)間的設(shè)置方式如下:

CronTrigger配置完整格式為: [秒] [分] [小時(shí)] [日] [月] [周] [年]
示例:
0 0 10,14,16 * * ? 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn)
0 0/30 9-17 * * ? 朝九晚五工作時(shí)間內(nèi)每半小時(shí)
0 0 12 ? * WED 表示每個(gè)星期三中午12點(diǎn) 
"0 0 12 * * ?" 每天中午12點(diǎn)觸發(fā) 
"0 15 10 ? * *" 每天上午10:15觸發(fā) 
"0 15 10 * * ?" 每天上午10:15觸發(fā) 
"0 15 10 * * ? *" 每天上午10:15觸發(fā) 
"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發(fā) 
"0 * 14 * * ?" 在每天下午2點(diǎn)到下午2:59期間的每1分鐘觸發(fā) 
"0 0/5 14 * * ?" 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā) 
"0 0/5 14,18 * * ?" 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā) 
"0 0-5 14 * * ?" 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā) 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā) 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā) 
"0 15 10 15 * ?" 每月15日上午10:15觸發(fā) 
"0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā) 
"0 15 10 ? * 6L" 每月的最后一個(gè)星期五上午10:15觸發(fā) 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個(gè)星期五上午10:15觸發(fā) 
"0 15 10 ? * 6#3" 每月的第三個(gè)星期五上午10:15觸發(fā) 

序號(hào) 說明 是否必填 允許填寫的值 允許的通配符
1 0-59 , - * /
2 0-59 , - * /
3 時(shí) 0-23 , - * /
4 1-31 , - * ? / L W
5 1-12或JAN-DEC , - * /
6 1-7或SUN-SAT , - * ? / L W
7 empty 或1970-2099 , - * /

通配符說明:

* 表示所有值. 例如:在分的字段上設(shè)置 "*",表示每一分鐘都會(huì)觸發(fā)

? 表示不指定值。使用的場(chǎng)景為不需要關(guān)心當(dāng)前設(shè)置這個(gè)字段的值。

例如:要在每月的10號(hào)觸發(fā)一個(gè)操作,但不關(guān)心是周幾,所以需要周位置的那個(gè)字段設(shè)置為"?" 具體設(shè)置為 0 0 0 10 * ?

- 表示區(qū)間。例如 在小時(shí)上設(shè)置 "10-12",表示 10,11,12點(diǎn)都會(huì)觸發(fā)。

, 表示指定多個(gè)值,例如在周字段上設(shè)置 "MON,WED,FRI" 表示周一,周三和周五觸發(fā)

/ 用于遞增觸發(fā)。如在秒上面設(shè)置"5/15" 表示從5秒開始,每增15秒觸發(fā)(5,20,35,50)。 在月字段上設(shè)置'1/3'所示每月1號(hào)開始,每隔三天觸發(fā)一次。

L 表示最后的意思。在日字段設(shè)置上,表示當(dāng)月的最后一天(依據(jù)當(dāng)前月份,如果是二月還會(huì)依據(jù)是否是潤(rùn)年[leap]), 在周字段上表示星期六,相當(dāng)于"7"或"SAT"。如果在"L"前加上數(shù)字,則表示該數(shù)據(jù)的最后一個(gè)。例如在周字段上設(shè)置"6L"這樣的格式,則表示“本月最后一個(gè)星期五"

W 表示離指定日期的最近那個(gè)工作日(周一至周五). 例如在日字段上設(shè)置"15W",表示離每月15號(hào)最近的那個(gè)工作日觸發(fā)。如果15號(hào)正好是周六,則找最近的周五(14號(hào))觸發(fā), 如果15號(hào)是周未,則找最近的下周一(16號(hào))觸發(fā).如果15號(hào)正好在工作日(周一至周五),則就在該天觸發(fā)。如果指定格式為 "1W",它則表示每月1號(hào)往后最近的工作日觸發(fā)。如果1號(hào)正是周六,則將在3號(hào)下周一觸發(fā)。(注,"W"前只能設(shè)置具體的數(shù)字,不允許區(qū)間"-").

# 序號(hào)(表示每月的第幾個(gè)周幾),例如在周字段上設(shè)置"6#3"表示在每月的第三個(gè)周六.注意如果指定"#5",正好第五周沒有周六,則不會(huì)觸發(fā)該配置(用在母親節(jié)和父親節(jié)再合適不過了) ;

小提示:
'L'和 'W'可以組合使用。如果在日字段上設(shè)置"LW",則表示在本月的最后一個(gè)工作日觸發(fā);
周字段的設(shè)置,若使用英文字母是不區(qū)分大小寫的,即MON 與mon相同;

參考:

https://www.cnblogs.com/liaojie970/p/5913272.html

http://prisonbreak.iteye.com/blog/2247216

相關(guān)文章

  • 流式圖表拒絕增刪改查之框架搭建過程

    流式圖表拒絕增刪改查之框架搭建過程

    這篇文章主要為大家介紹了流式圖表拒絕增刪改查之框架搭建過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • SpringBoot集成P6spy實(shí)現(xiàn)自定義SQL日志打印

    SpringBoot集成P6spy實(shí)現(xiàn)自定義SQL日志打印

    本文主要介紹了SpringBoot集成P6spy實(shí)現(xiàn)自定義SQL日志打印,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Jenkins自動(dòng)構(gòu)建部署項(xiàng)目到遠(yuǎn)程服務(wù)器上的方法步驟

    Jenkins自動(dòng)構(gòu)建部署項(xiàng)目到遠(yuǎn)程服務(wù)器上的方法步驟

    這篇文章主要介紹了Jenkins自動(dòng)構(gòu)建部署項(xiàng)目到遠(yuǎn)程服務(wù)器上的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Deep Module深模塊之軟件設(shè)計(jì)

    Deep Module深模塊之軟件設(shè)計(jì)

    這篇文章主要介紹了軟件設(shè)計(jì)之Deep Module深模塊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • java 排序算法之希爾算法

    java 排序算法之希爾算法

    這篇文章主要介紹了java 排序算法之希爾排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • java-for循環(huán)問題

    java-for循環(huán)問題

    這篇文章主要介紹了java-for循環(huán)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java SE實(shí)現(xiàn)多人聊天室功能

    Java SE實(shí)現(xiàn)多人聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Java SE實(shí)現(xiàn)多人聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    Spring Boot 訪問安全之認(rèn)證和鑒權(quán)詳解

    這篇文章主要介紹了Spring Boot 訪問安全之認(rèn)證和鑒權(quán),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 一文簡(jiǎn)介Java中BlockingQueue阻塞隊(duì)列

    一文簡(jiǎn)介Java中BlockingQueue阻塞隊(duì)列

    本文主要介紹了一文簡(jiǎn)介Java中BlockingQueue阻塞隊(duì)列,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java使用J4L識(shí)別驗(yàn)證碼的操作方法

    Java使用J4L識(shí)別驗(yàn)證碼的操作方法

    這篇文章主要介紹了Java使用J4L識(shí)別驗(yàn)證碼的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02

最新評(píng)論