最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中實(shí)現(xiàn)一個(gè)定時(shí)任務(wù)的方式

 更新時(shí)間:2025年03月08日 11:53:05   作者:北極的企鵝88  
本文介紹了三種在Java中實(shí)現(xiàn)定時(shí)任務(wù)的方法,并推薦使用Spring Boot注解方式,介紹了如何使用`@Scheduled`注解結(jié)合Cron表達(dá)式來(lái)設(shè)置定時(shí)任務(wù),并提供了一個(gè)示例配置文件

java實(shí)現(xiàn)一個(gè)定時(shí)任務(wù)

需求說(shuō)明

項(xiàng)目中需要每天定時(shí)更新mysql數(shù)據(jù)到另一個(gè)數(shù)據(jù)庫(kù)中,暫定每天中午12:00定時(shí)啟動(dòng)更新任務(wù)。

實(shí)現(xiàn)方式有三種

第一種

使用javaJDK自帶的timeTask和Calendar實(shí)現(xiàn)定時(shí)任務(wù),這種方式可以設(shè)置延時(shí),執(zhí)行間隔,也能設(shè)置執(zhí)行時(shí)間點(diǎn),我用的就是這種。

//第一種:每天中午12點(diǎn)定時(shí)開啟任務(wù)
public static void main(String[] args) {
        //Calendar這個(gè)技術(shù)也是基于java的線程去做的
        //設(shè)置第一次更新的時(shí)間點(diǎn)
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 12);//控制小時(shí)
        calendar.set(Calendar.MINUTE, 0);//控制分鐘,
        calendar.set(Calendar.SECOND, 0);//控制秒,
         //利用java的api Timer來(lái)完成一個(gè)定時(shí)任務(wù)
        Timer timer = new Timer();
        TimerTask task=new TimerTask() {
            @Override
            public void run() {
            // 實(shí)現(xiàn)自己的定時(shí)任務(wù)操作
                System.out.println("這是一個(gè)定時(shí)任務(wù)!去更新數(shù)據(jù)庫(kù)數(shù)據(jù)!");

            }
        };
        /*
        * 從第一次發(fā)布任務(wù)的12:00開始執(zhí)行任務(wù),每隔(1000 * 60 * 60 * 24)天,定時(shí)執(zhí)行
        * */
        timer.schedule(task, calendar.getTime() , 1000 * 60 * 60 * 24);
    }
    
//第二種:定時(shí)更新,啟動(dòng)就開始開啟定時(shí)任務(wù),每隔2秒鐘開啟一次任務(wù)
    public static void main(String[] args) {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("定時(shí)任務(wù)啟動(dòng)" + new Date());
            }
        };
        Timer timer = new Timer();
//方法參數(shù),定時(shí)執(zhí)行內(nèi)容,延時(shí)(單位毫秒),執(zhí)行間隔(單位毫秒)
        timer.schedule(timerTask,100,2000);
    }

第二種

使用ScheduledExecutorService執(zhí)行定時(shí)任務(wù),這個(gè)也是JDK自帶的,它執(zhí)行的定時(shí)任務(wù)的線程是從線程池中取,任務(wù)是并行進(jìn)行的,互不影響。

/**
 * 使用ScheduledExecutorService執(zhí)行定時(shí)任務(wù)
 */
public class get003 {
    public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        //參數(shù);任務(wù)體,首次執(zhí)行的延時(shí)時(shí)間,任務(wù)執(zhí)行的間隔,間隔時(shí)間單位
        service.scheduleAtFixedRate(()-> System.out.println("任務(wù)啟動(dòng)"+new Date()),0,3, TimeUnit.SECONDS);
    }
}

第三種

(推薦)結(jié)合springboot注解實(shí)現(xiàn)定時(shí)任務(wù),新建一個(gè)任務(wù)類,在該類上加上@Component和@EnableScheduling注解,在方法上加上@Scheduled注解,在@Scheduled注解的屬性cron上加上啟動(dòng)時(shí)間,然后啟動(dòng)項(xiàng)目,到了任務(wù)啟動(dòng)時(shí)間就會(huì)去執(zhí)行任務(wù)方法。

可以在該類中定義多個(gè)定時(shí)任務(wù),只需要在每個(gè)任務(wù)方法上加上@Scheduled注解即可。

/**
 * 定時(shí)任務(wù),主類加上@Component和@EnableScheduling注解,在方法上加上@Scheduled注解
 * 注意的是,可以加個(gè)開關(guān)來(lái)決定任務(wù)是否執(zhí)行
 */
@Slf4j
@Component
@EnableScheduling
public class TaskInfo {
//從配置文件中讀取開關(guān)的值
    @Value("${task.switch.is-open}")
    private boolean flag;
    @Scheduled(cron = "${task.corn.task-corn}")
    public void m1() {
//判斷開關(guān)狀態(tài)
        if (flag){
            SimpleDateFormat stf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = stf.format(new Date());
            System.out.println("定時(shí)任務(wù)啟動(dòng)->>" + format);
        }else {
            System.out.println("未開啟定時(shí)任務(wù)開關(guān),請(qǐng)重試!");
        }
    }
}
  • @Value:從配置文件中讀取屬性值
  • cron:特殊的時(shí)間格式,時(shí)分秒 年月日都是有不同的表達(dá)形式。

這里我設(shè)置了一個(gè)任務(wù)開關(guān),當(dāng)工程部署在多個(gè)服務(wù)器時(shí),如何我想讓某個(gè)時(shí)間點(diǎn)只有一臺(tái)機(jī)器在跑定時(shí)任務(wù),我就可以將其他的開關(guān)設(shè)置為false,需要啟動(dòng)的那臺(tái)開關(guān)設(shè)置為true,可以靈活的控制定時(shí)任務(wù)的啟動(dòng),配置文件定時(shí)任務(wù)配置如下:

  #定時(shí)任務(wù)
task:
    switch:
      is-open: false #開關(guān)
    corn:
      task-corn: 0 48 21 * * ? #定時(shí)任務(wù)時(shí)間格式

2021-08-16 21:47:31.255  INFO 8888 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-08-16 21:47:31.255  INFO 8888 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.38]
2021-08-16 21:47:31.555  INFO 8888 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-08-16 21:47:31.555  INFO 8888 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1174 ms
2021-08-16 21:47:31.956  INFO 8888 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-08-16 21:47:32.104  INFO 8888 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
2021-08-16 21:47:32.151  INFO 8888 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-08-16 21:47:32.165  INFO 8888 --- [           main] com.cry.PdosWebApplication               : Started PdosWebApplication in 2.181 seconds (JVM running for 3.035)
進(jìn)銷存web啟動(dòng)成功!
未開啟定時(shí)任務(wù)開關(guān),請(qǐng)重試!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java文本文件操作方法實(shí)例詳解

    Java文本文件操作方法實(shí)例詳解

    這篇文章主要介紹了Java文本文件操作方法,以實(shí)例形式較為詳細(xì)的分析了java操作文本文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • java 一個(gè)類實(shí)現(xiàn)兩個(gè)接口的案例

    java 一個(gè)類實(shí)現(xiàn)兩個(gè)接口的案例

    這篇文章主要介紹了java 一個(gè)類實(shí)現(xiàn)兩個(gè)接口的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • java中stringBuilder的用法詳解

    java中stringBuilder的用法詳解

    這篇文章主要介紹了java中stringBuilder的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java中高效的判斷數(shù)組中某個(gè)元素是否存在詳解

    Java中高效的判斷數(shù)組中某個(gè)元素是否存在詳解

    相信大家在操作Java的時(shí)候,經(jīng)常會(huì)要檢查一個(gè)數(shù)組(無(wú)序)是否包含一個(gè)特定的值?這是一個(gè)在Java中經(jīng)常用到的并且非常有用的操作。同時(shí),這個(gè)問(wèn)題在Stack Overflow中也是一個(gè)非常熱門的問(wèn)題。本文將分析幾種常見用法及其時(shí)間成本,有需要的朋友們可以參考借鑒。
    2016-11-11
  • MybatisPlus使用代碼生成器遇到的小問(wèn)題(推薦)

    MybatisPlus使用代碼生成器遇到的小問(wèn)題(推薦)

    這篇文章主要介紹了MybatisPlus使用代碼生成器遇到的小問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java實(shí)現(xiàn)百度云OCR文字識(shí)別 高精度OCR識(shí)別身份證信息

    java實(shí)現(xiàn)百度云OCR文字識(shí)別 高精度OCR識(shí)別身份證信息

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)百度云OCR文字識(shí)別,高精度OCR識(shí)別身份證信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java四位電話號(hào)碼的加密方法

    Java四位電話號(hào)碼的加密方法

    這篇文章主要為大家詳細(xì)介紹了Java四位電話號(hào)碼的加密方法,數(shù)據(jù)是四位的整數(shù),在傳遞過(guò)程中進(jìn)行加密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn)

    Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn)

    這篇文章主要介紹了Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 在Java中如何對(duì)類進(jìn)行排序詳解

    在Java中如何對(duì)類進(jìn)行排序詳解

    這篇文章主要給大家介紹了關(guān)于如何在Java中使用Arrays.toString()對(duì)類進(jìn)行排序的相關(guān)資料,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Java高并發(fā)BlockingQueue重要的實(shí)現(xiàn)類詳解

    Java高并發(fā)BlockingQueue重要的實(shí)現(xiàn)類詳解

    這篇文章主要給大家介紹了關(guān)于Java高并發(fā)BlockingQueue重要的實(shí)現(xiàn)類的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

阿图什市| 措勤县| 岫岩| 宜黄县| 大兴区| 红原县| 阿坝县| 京山县| 清涧县| 六枝特区| 宜都市| 伊川县| 夏邑县| 永嘉县| 嘉定区| 沽源县| 永吉县| 茌平县| 饶河县| 南和县| 酒泉市| 宁国市| 康定县| 新疆| 娄底市| 宣化县| 嘉义市| 宜州市| 汽车| 安宁市| 黔西县| 曲沃县| 公主岭市| 岑溪市| 确山县| 芦山县| 霞浦县| 镇赉县| 隆安县| 宜宾县| 确山县|