springboot根據(jù)啟動文件關(guān)閉定時任務(wù)的解決方法
一、前言
項目里有3個配置文件:
//生產(chǎn)環(huán)境用 application-prod.yml //測試環(huán)境用 application-test.yml //本地啟動用 //為什么本地不用test?因為測試環(huán)境是linux系統(tǒng),本地是windows系統(tǒng),路徑不一致,本地有盤符,還是得區(qū)分開 application-dev.yml
現(xiàn)在想讓本地dev啟動時,不執(zhí)行定時任務(wù),防止定時任務(wù)誤啟動導(dǎo)致影響測試環(huán)境。
代碼也不想改動太多。
二、解決方法
找到了一種最小的改動方法。
1.如果是springboot項目啟動類里加了@EnableScheduling注解,那就先把這個注解拆出來,不要加,如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}2.單獨建一個定時任務(wù)配置java類,如下:
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@Profile("!dev") // 非 dev 環(huán)境啟用定時任務(wù)
@EnableScheduling
public class SchedulingConfig {
//這個配置類為空類即可,不需要內(nèi)容
}其中,@Configuration是標(biāo)志這個類是配置類,加了springboot啟動時,才會掃描到這個類;
@EnableScheduling注解標(biāo)志啟用定時任務(wù)功能,有了這個,其他類配置的定時任務(wù)@Scheduled(cron = "0 0/30 * * * ?")這種才會生效;
@Profile("!dev")表示,只有啟動配置文件不是dev,才會加載這個類,如果是dev就不加載。
只有加載了這個類,才有@EnableScheduling注解,才會開啟定時任務(wù)執(zhí)行;
如果不加載這個類,那就相當(dāng)于沒有@EnableScheduling注解,其他類配置的定時任務(wù)@Scheduled(cron = "0 0/30 * * * ?")不會生效,也就不會執(zhí)行。
3.當(dāng)application.yml里用這個啟動時:
spring:
profiles:
active: dev或者啟動java項目用參數(shù)-Dspring.profiles.active=dev時(這個優(yōu)先級高,會覆蓋application.yml的配置):
就說明啟動參數(shù)是dev,后續(xù)讀取application-dev.yml文件;
因為啟動參數(shù)是dev,所以根據(jù)@Profile("!dev") ,不加載java文件,沒有開啟定時任務(wù)注解,也就不會執(zhí)行定時任務(wù)了。
4.可以測試,如果開啟了定時任務(wù),控制臺就會有這個日志,搜索Scheduler(沒有開啟就沒有):
11:38:38.520 [main] INFO o.s.s.c.ThreadPoolTaskScheduler - [initialize,181] - Initializing ExecutorService 'taskScheduler'
到此這篇關(guān)于springboot根據(jù)啟動文件關(guān)閉定時任務(wù)的文章就介紹到這了,更多相關(guān)springboot啟動文件關(guān)閉定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot運行時修改定時任務(wù)Cron表達式的實現(xiàn)方案
- Springboot使用Redis實現(xiàn)定時任務(wù)的三種方式
- SpringBoot最簡單的定時任務(wù)@Scheduler的使用及解讀
- SpringBoot項目使用@Scheduled注解實現(xiàn)定時任務(wù)的方法
- SpringBoot項目如何使用多線程執(zhí)行定時任務(wù)
- SpringBoot最新定時任務(wù)的7種實現(xiàn)方案
- SpringBoot3整合Quartz實現(xiàn)定時任務(wù)的示例
- SpringBoot整合quartz實現(xiàn)定時任務(wù)
- SpringBoot創(chuàng)建動態(tài)定時任務(wù)的幾種方式小結(jié)
相關(guān)文章
SpringBoot中ApplicationEvent和ApplicationListener用法小結(jié)
這篇文章介紹SpringBoot中ApplicationEvent用法,注意ApplicationEvent和MQ隊列雖然實現(xiàn)的功能相似,但是MQ還是有其不可替代性的,最本質(zhì)的區(qū)別就是MQ可以用于不同系統(tǒng)之間的消息發(fā)布,而SpringEvent這種模式只能在一個系統(tǒng)中,需要的朋友可以參考下2023-03-03
Spring Boot通過Junit實現(xiàn)單元測試過程解析
這篇文章主要介紹了Spring Boot通過Junit實現(xiàn)單元測試過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
Spring BPP中如何優(yōu)雅的創(chuàng)建動態(tài)代理Bean詳解
這篇文章主要給大家介紹了關(guān)于Spring BPP中如何優(yōu)雅的創(chuàng)建動態(tài)代理Bean的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
關(guān)于Mybatis 中使用Mysql存儲過程的方法
這篇文章給大家介紹了Mybatis 中使用Mysql存儲過程的方法,本文通過實例代碼相結(jié)合的形式給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友參考下吧2018-03-03

