1. 程式人生 > >springboot 啟動時執行單次任務

springboot 啟動時執行單次任務

 最近做任務遇到一個問題,需要在專案啟動時候執行掃描資料庫表的任務,用於異常恢復容災,一開始想的是可不可以使用定時任務

程式碼如下 並且在啟動類加上

@EnableScheduling註解就可以實現定時去執行任務了 
package com.beihui.service.task;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class XXXTask {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Scheduled(cron = "0 0 0 * * ?")
    public void bTask() {
        long startCurrentTime = System.currentTimeMillis();
        logger.info("開始執行定時任務:" + startCurrentTime);
        //業務處理
        long endTime = System.currentTimeMillis();
        logger.info("定時任務:執行結束,花費時間" + (endTime - startCurrentTime));
    }


    @Scheduled(cron = "0 */1 * * * ?")
    public void runUpdateDbTask() {
        long startCurrentTime = System.currentTimeMillis();
        logger.info("開始執行更新資料庫剩餘次數定時任務:" + startCurrentTime);
       //業務處理
        long endTime = System.currentTimeMillis();
        logger.info("定時任務:執行結束,花費時間" + (endTime - startCurrentTime));
    }

    @Scheduled(fixedDelay = 60 * 1000 * 10)
    public void cTask() {
        long startCurrentTime = System.currentTimeMillis();
       //業務處理

        long endTime = System.currentTimeMillis();
        logger.info("定時任務:執行結束,花費時間" + (endTime - startCurrentTime));
    }

}

但是這個並不能單次執行任務,所以後來 使用listener

程式碼如下,並在啟動類加上

@ServletComponentScan註解 
package xx.xx.xx;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class XXXListener implements ServletContextListener {
    private Logger logger = LoggerFactory.getLogger(this.getClass());


//專案啟動執行
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        long startTime = System.currentTimeMillis();
        logger.info("開始執行啟動任務,{}"+startTime);
        //業務處理
        long endTime = System.currentTimeMillis();
        logger.info("執行啟動任務結束,共花費時間{}"+(startTime-endTime));
    }

//專案終止時執行
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}

相關推薦

springboot 啟動執行任務

 最近做任務遇到一個問題,需要在專案啟動時候執行掃描資料庫表的任務,用於異常恢復容災,一開始想的是可不可以使用定時任務 程式碼如下 並且在啟動類加上 @EnableScheduling註解就可以實現定時去執行任務了 package com.beihui.servi

springBoot啟動,選擇可執行任務

一次。。有人問我:“boot 啟動時 如果想要執行一些任務怎麼做?” 我特二的回答。放在spring auto 啟動配置項裡面

探究SpringBoot啟動實現自動執行程式碼

前言 目前開發的SpringBoot專案在啟動的時候需要預載入一些資源。而如何實現啟動過程中執行程式碼,或啟動成功後執行,是有很多種方式可以選擇,我們可以在static程式碼塊中實現,也可以在構造方法裡實現,也可以使用@PostConstruct註解實現,當然

SpringBoot啟動執行程式碼

在Spring boot專案的實際開發中,我們有時需要專案服務啟動時載入一些資料或預先完成某些動作。為了解決這樣的問題,Spring boot 為我們提供了一個方法:通過實現介面 CommandLineRunner 來實現這樣的需求。 實現方式:只需要一個類即可,無需其

ASP.NET Core 3.x啟動執行非同步任務(一)

這是一個大的題目,需要用幾篇文章來說清楚。這是第一篇。   一、前言 在我們的專案中,有時候我們需要在應用程式啟動前執行一些一次性的邏輯。比方說:驗證配置的正確性、填充快取、或者執行資料庫清理/遷移等。 如何合理、有效、優雅地完成這個任務,是這個文章討論的主要內容。   要實現這樣一個功能,其實我們有幾

ASP.NET Core 3.x啟動執行非同步任務(二)

這一篇是接著前一篇在寫的。如果沒有看過前一篇文章,建議先去看一下前一篇,這兒是傳送門   一、前言 前一篇文章,我們從應用啟動時非同步執行任務開始,說到了必要性,也說到了幾種解決方法,及各自的優缺點。最後,還提出了一個比較合理的解決方法:通過在Program.cs里加入程式碼,來實現IWebHost啟動

SpringBoot啟動的Banner設置

日誌輸出 三種 ole framework 四種 括號 設計 erp 喜歡 對於使用過Spring Boot的開發者來說,程序啟動的時候輸出的由字符組成的Spring符號並不陌生。這個是Spring Boot為自己設計的Banner: 1. . ____

docker容器啟動執行腳本 run /bin/bash執行多條指令

null 最好 執行 ash .sh bash 指令 docke -i 1、首先需要編寫需要啟動的腳本,並將腳本放在 /etc/init.d/目錄下 如:cs.sh 2、修改權限 3、chkconfig --add cs.sh 4、 chkconfig cs.sh on 啟

crontab中如何設定每30秒執行任務

crontab任務配置基本格式:*   *  *  *  *  command 第1列表示分鐘0~59 每分鐘用*或者 */1表示 第2列表示小時0~23(0表示0點) 第3列表示日期1~31 第4列表示月份1~12 第5列標識號星期0~6(0,7都可表示星期天) 第6列要執

shell-5秒執行任務

crontab 最低1分鐘執行,無法達到秒級,就需要寫個for迴圈去執行任務,到達秒執行自動任務 #!/bin/bash step=5 #間隔的秒數,不能大於60 for (( i = 0; i < 60; i=(i+step) )); do $

Java專案啟動執行指定方法的幾種方式

很多時候我們都會碰到需要在程式啟動時去執行的方法,比如說去讀取某個配置,預載入快取,定時任務的初始化等。這裡給出幾種解決方案供大家參考。 1. 使用@PostConstruct註解 這個註解呢,可以在Spring載入這個類的時候執行一次。來看一下下方程式碼。

Spring Boot應用程式在啟動執行一些操作的方法

如果想在生成物件時候完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那麼就無法在建構函式中實現。為此,可以使用@PostConstruct註解一個方法來完成初始化,@PostConstruct註解的方法將會在依賴注入完成後被自動呼叫。 @PostConstruct是spring框架的註

配置web專案啟動,伺服器啟動執行該事件

1.配置web.xml檔案: <listener><listener-class>監聽器的路徑</listener-class></listener> 2.編寫java 類 package com.ronhe.romp.core.

kafka消費者監控,程式啟動執行

1.1 web.xml檔案新增listenner,如下: <listener> <listener-class>com.sinosoft.lis.listener.ConsumerThreadListener</listener-class>

DotNetCore跨平臺~Quartz定時任務

回到目錄 之前寫過一篇檔案《DotNetCore跨平臺~Quartz熱部署的福音~監控資料夾的變化》,今天主要把框架優化了一下,支援外部觸發,並支援外部將引數以JobDataMap形式進行輸入,然後在咱們的Job裡進行使用它,故稱引數化任務。 Quartz使用場景: 定時單次任務:在未來某個時間去執

spring定時器在啟動執行,用註解方式

這個問題被坑大發了,因為沒加<load-on-startup>1</load-on-startup>,定時器就是不起來。web.xml中,一定記得新增<load-on-startup>1</load-on-startup>,這樣

spring在web容器啟動執行初始化方法(四種方式)

需求:在tomcat啟動時開啟一個定時任務,或初始化slor索引 想法:容器啟動時執行方法,最容易想到的就是servlet中可以配置load-on-startup,設定一個正整數也就可以隨容器一起啟動。 問題:上面的方法很好,但是由於定時任務需要去操作資料庫,而專案

SpringBoot啟動Banner設定

對於接觸過spring boot開發的技術人員來說,spring boot啟動時的banner字元輸出,並不陌生,有可能不知道這個名詞,但是一定很熟悉如下字串圖案   .   ____          _            __ _ _    /\\ / ___'

java web啟動執行初始化任務

寫一個類繼承ApplicationListener,可以直接引用下述程式碼,然後呼叫相應的方法。 package com.linewell.system; import com.linewell.cache.ApplicationData; import org.springframework.co

spring配置專案啟動執行

首先在配置檔案中新增配置 <!-- 配置專案啟動時執行  init方法--><bean id="smsmanage" class="com.longriver.sms.utils.S