Spring Boot 中啟用定時(shí)任務(wù)的操作方法
添加 @EnableScheduling 注解
可以添加在 Application 類上
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}定義定時(shí)任務(wù)類和方法
定時(shí)任務(wù)類要注冊為Spring IoC 容器的 Bean,或者通過 @Bean 將某個(gè)方法的返回值(返回值為定時(shí)任務(wù)類對象)注冊為 Spring IoC 的Bean。
package com.cmcc.nlpt.sitemessage.task;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTask {
/**
* 每日0點(diǎn)執(zhí)行
*/
@Scheduled (cron = "0 0 0 * * ?")
public void doCronTask() {
}
/**
* 本次任務(wù)結(jié)束到下次任務(wù)開始的時(shí)間間隔為5秒
*/
@Scheduled (fixedDelay = 5000)
public void doFixedDelayTask() {
}
/**
* 兩次任務(wù)開始時(shí)間間間隔為5秒
*/
@Scheduled(fixedRate = 5000)
public void doFixedRateTask() {
}
/**
* 第一次任務(wù)啟動延時(shí)1秒,后續(xù)任務(wù)結(jié)束到下次任務(wù)開始的時(shí)間間隔為5秒
*/
@Scheduled(initialDelay = 1000, fixedDelay = 5000)
public void doInitialDelayTask() {
}
}通過配置項(xiàng)控制定時(shí)任務(wù)是否開啟
方法一 @ConditionalOnProperty
此方法是控制任務(wù)類是否注冊為 Spring IoC 的 Bean,可以控制上述所有類型的定時(shí)任務(wù)是否注冊。
# enabled 配置為 false 時(shí)定時(shí)任務(wù)就不會開啟 scheduled-task: enabled: true
@Component
@ConditionalOnProperty(name = "scheduled-task.enabled", havingValue = "true")
public class ScheduledTask {
/**
* 每日0點(diǎn)執(zhí)行
*/
@Scheduled (cron = "0 0 0 * * ?")
public void doCronTask() {
}
/**
* 本次任務(wù)結(jié)束到下次任務(wù)開始的時(shí)間間隔為5秒
*/
@Scheduled (fixedDelay = 5000)
public void doFixedDelayTask() {
}
/**
* 兩次任務(wù)開始時(shí)間間間隔為5秒
*/
@Scheduled(fixedRate = 5000)
public void doFixedRateTask() {
}
/**
* 第一次任務(wù)啟動延時(shí)1秒,后續(xù)任務(wù)結(jié)束到下次任務(wù)開始的時(shí)間間隔為5秒
*/
@Scheduled(initialDelay = 1000, fixedDelay = 5000)
public void doInitialDelayTask() {
}
}方法二 Boolean 標(biāo)志位
使用此方法定時(shí)任務(wù)還是會被調(diào)度執(zhí)行,只是在任務(wù)執(zhí)行時(shí)什么都不做,也可以控制上述所有類型的定時(shí)任務(wù)。
scheduled-task: enabled: true
@Component
@ConditionalOnProperty(name = "scheduled-task.enabled", havingValue = "true")
public class ScheduledTask {
@Value("${scheduled-task.enabled}")
private Boolean taskEnabled;
@Scheduled (fixedDelay = 5000)
public void doFixedDelayTask() {
if (!taskEnabled) {
return;
}
System.out.println("start to doFixedDelayTask");
}
}使用"-"使 cron 定時(shí)任務(wù)關(guān)閉
此方法只適用于 cron 類型的定時(shí)任務(wù),不適用于其它類型的定時(shí)任務(wù)。
注意:yml 文件中配置 - 時(shí)要加上雙引號或單引號,否則會報(bào)錯(cuò)。
關(guān)閉 cron 定時(shí)任務(wù)的配置:
scheduled-task: cron: "-"
開始 cron 定時(shí)任務(wù)的配置,將 cron 表達(dá)式配置上即可:
scheduled-task: cron: 0 0 0 * * ?
@Component
public class ScheduledTask {
/**
* 每日0點(diǎn)執(zhí)行
*/
@Scheduled (cron = "${scheduled-task.cron}")
public void doCronTask() {
}
}參考資料
- Michael Pratt:Conditionally Enable Scheduled Jobs in Spring
- tan日拱一兵:@ConditionalOn…注解,條件組合你知道嗎?
- 江南一點(diǎn)雨:Spring Boot 中實(shí)現(xiàn)定時(shí)任務(wù)的兩種方式!
到此這篇關(guān)于如何在 Spring Boot 中啟用定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)Spring Boot啟用定時(shí)任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 如何解決SpringBoot定時(shí)任務(wù)報(bào)錯(cuò)Unexpected error occurred in scheduled task問題
- SpringBoot使用@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)的并行執(zhí)行
- springboot定時(shí)任務(wù)SchedulingConfigurer異步多線程實(shí)現(xiàn)方式
- xxl-job定時(shí)任務(wù)配置應(yīng)用及添加到springboot項(xiàng)目中實(shí)現(xiàn)動態(tài)API調(diào)用
- SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的4種方式詳解
- SpringBoot集成xxl-job實(shí)現(xiàn)超牛的定時(shí)任務(wù)的步驟詳解
- SpringBoot實(shí)現(xiàn)設(shè)置動態(tài)定時(shí)任務(wù)的方法詳解
- SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式
相關(guān)文章
Java的validation參數(shù)校驗(yàn)代碼實(shí)例
這篇文章主要介紹了Java的validation參數(shù)校驗(yàn)代碼實(shí)例,Validation參數(shù)校驗(yàn)是指在程序運(yùn)行中對傳進(jìn)來的參數(shù)進(jìn)行合法性檢查,以保證程序的正確性和安全性,需要的朋友可以參考下2023-10-10
結(jié)合線程池實(shí)現(xiàn)apache?kafka消費(fèi)者組的誤區(qū)及解決方法
這篇文章主要介紹了結(jié)合線程池實(shí)現(xiàn)apache?kafka消費(fèi)者組的誤區(qū)及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
spring cloud學(xué)習(xí)入門之config配置教程
這篇文章主要給大家介紹了關(guān)于spring cloud學(xué)習(xí)入門之config配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring cloud具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
java 實(shí)現(xiàn)通過 post 方式提交json參數(shù)操作
這篇文章主要介紹了java 實(shí)現(xiàn)通過 post 方式提交json參數(shù)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
IDEA啟動tomcat項(xiàng)目報(bào)錯(cuò)53820 socket closed問題及解決
IDEA啟動Tomcat項(xiàng)目時(shí)報(bào)錯(cuò),原因是IDEA關(guān)閉時(shí)Tomcat未正常關(guān)閉,導(dǎo)致端口被占用,解決方法是通過任務(wù)管理器關(guān)閉占用高內(nèi)存的Java進(jìn)程,通常是IDEA進(jìn)程下面的,或者使用命令行找到PID并強(qiáng)制終止進(jìn)程2024-12-12
微信js-sdk+JAVA實(shí)現(xiàn)“分享到朋友圈”和“發(fā)送給朋友”功能詳解
本文分享了微信js-sdk+JAVA實(shí)現(xiàn)“分享到朋友圈”和“發(fā)送給朋友”功能介紹,大家可以參考一下2018-03-03

