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

SpringBoot項(xiàng)目啟動(dòng)時(shí)初始化操作常見的幾種方式

 更新時(shí)間:2025年02月12日 10:31:05   作者:一個(gè)努力成長(zhǎng)的咸魚  
這篇文章主要介紹了SpringBoot項(xiàng)目啟動(dòng)時(shí)初始化操作常見的幾種方式,這些方法可以幫助開發(fā)者在服務(wù)啟動(dòng)時(shí)自動(dòng)執(zhí)行必要的初始化操作,需要的朋友可以參考下

一.前言    

通常的我們的項(xiàng)目開發(fā)中,經(jīng)常會(huì)遇到那種在服務(wù)一啟動(dòng)就需要自動(dòng)執(zhí)行一些業(yè)務(wù)代碼的情況。

    以下是常見的初始化場(chǎng)景:

    1.數(shù)據(jù)庫(kù)初始化:創(chuàng)建表、加載數(shù)據(jù)。

    2.緩存初始化:初始化 Redis 或其他緩存。如數(shù)據(jù)庫(kù)中的配置信息或者數(shù)據(jù)字典之類的緩存到redis

    3.消息隊(duì)列初始化:初始化消息隊(duì)列的連接和配置。

    4.定時(shí)任務(wù)初始化:設(shè)置定時(shí)任務(wù)的執(zhí)行。

    5.Spring Security 配置初始化:設(shè)置默認(rèn)用戶和權(quán)限。

    6.外部服務(wù)連接初始化:初始化與外部服務(wù)的連接。等等等......

二.常見的幾種方式    

1.使用 CommandLineRunner 或 ApplicationRunner 接口

CommandLineRunner 和 ApplicationRunner 接口可以用于 Spring Boot 啟動(dòng)時(shí)執(zhí)行自定義的代碼。這兩者都提供了一個(gè) run 方法,你可以在其中執(zhí)行啟動(dòng)時(shí)需要的初始化操作。

CommandLineRunner 接口的 run(String... args) 方法接收啟動(dòng)時(shí)傳入的命令行參數(shù)。
ApplicationRunner 接口的 run(ApplicationArguments args) 方法接收 Spring Boot 應(yīng)用程序啟動(dòng)時(shí)的參數(shù),這些參數(shù)可以是鍵值對(duì)格式。

CommandLineRunner 示例

@Component
public class StartupRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        // 在應(yīng)用啟動(dòng)時(shí)執(zhí)行的初始化邏輯
        System.out.println("應(yīng)用啟動(dòng)時(shí)執(zhí)行初始化操作...");
        // 可以在這里進(jìn)行一些數(shù)據(jù)加載、配置初始化等操作
    }
}

ApplicationRunner 示例

@Component
public class ApplicationStartupRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("應(yīng)用啟動(dòng)時(shí)執(zhí)行初始化操作...");
    }
}

2.使用 @PostConstruct 注解

@PostConstruct 注解的方法會(huì)在 Spring 完成所有 bean 的初始化之后自動(dòng)執(zhí)行。通常用來執(zhí)行一些初始化的邏輯,比如加載配置、初始化數(shù)據(jù)等。

@Component
public class MyStartupService {

    @PostConstruct
    public void init() {
        // 這是 Spring 完成所有 bean 初始化后執(zhí)行的代碼
        System.out.println("Spring 容器初始化完成,執(zhí)行初始化操作...");
    }
}

3. 使用 @EventListener 監(jiān)聽 ApplicationReadyEvent 或 ContextRefreshedEvent

Spring 提供了多種事件,可以在這些事件觸發(fā)時(shí)執(zhí)行初始化操作。例如,ApplicationReadyEvent 事件在 Spring Boot 應(yīng)用完全啟動(dòng)之后觸發(fā),ContextRefreshedEvent 事件在 Spring 上下文刷新之后觸發(fā)。

示例:使用 @EventListener 監(jiān)聽 ApplicationReadyEvent

@Component
public class StartupEventListener {

    @EventListener(ApplicationReadyEvent.class)
    public void onApplicationReady() {
        // 應(yīng)用完全啟動(dòng)后執(zhí)行的操作
        System.out.println("Spring Boot 應(yīng)用啟動(dòng)完成,可以執(zhí)行初始化操作...");
    }
}

 示例:使用 @EventListener 監(jiān)聽 ContextRefreshedEvent

@Component
public class ContextRefreshListener {

    @EventListener(ContextRefreshedEvent.class)
    public void onContextRefreshed() {
        // Spring 容器刷新時(shí)執(zhí)行的操作
        System.out.println("Spring 容器刷新完畢,執(zhí)行初始化操作...");
    }
}

4.實(shí)現(xiàn)org.springframework.beans.factory.InitializingBean接口并重寫 afterPropertiesSet()方法 

InitializingBean接口只包含一個(gè)方法afterPropertiesSet(),凡是繼承了InitializingBean接口的類,在初始化時(shí)都會(huì)調(diào)用這方法;
使用方法分為三個(gè)步驟:

1、被spring管理        2、 實(shí)現(xiàn)InitializingBean接口         3、重寫afterPropertiesSet方法

@Component
public class InitializationBeanTest implements InitializingBean{
    private static final Logger LOG = LoggerFactory.getLogger(InitializationBeanTest.class);
 
    @Override
    public void afterPropertiesSet() throws Exception {
        LOG.info("InitializingBean 開始了。。。");
        //初始化操作
    }
}

5.通過 ApplicationRunner 或 CommandLineRunner 配置條件啟動(dòng)

你可以通過 @Profile 或其他條件注解,來控制某些初始化邏輯僅在特定環(huán)境下執(zhí)行。

示例:根據(jù) @Profile 條件執(zhí)行初始化

@Component
@Profile("dev")  // 僅在 dev 配置下執(zhí)行
public class DevStartupRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("開發(fā)環(huán)境下執(zhí)行初始化操作...");
    }
}

6. 使用 Spring Boot 自定義 Banner

Spring Boot 支持通過配置自定義啟動(dòng)時(shí)的 banner 內(nèi)容。這種方式適合顯示一些自定義的歡迎信息或者標(biāo)識(shí)。

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.setBanner((environment, sourceClass, out) -> out.println("My Custom Banner!"));
        app.run(args);
    }
}

7. 初始化數(shù)據(jù)(例如:使用 @Bean 方法初始化數(shù)據(jù)庫(kù)或其他資源)

你還可以通過 @Bean 方法配置 Spring Boot 應(yīng)用啟動(dòng)時(shí)進(jìn)行數(shù)據(jù)初始化,或者進(jìn)行外部服務(wù)的連接初始化。

示例:初始化數(shù)據(jù)庫(kù)

@Configuration
public class DataInitConfig {

    @Bean
    public CommandLineRunner initializeData() {
        return args -> {
            // 在應(yīng)用啟動(dòng)時(shí)加載或初始化數(shù)據(jù)
            System.out.println("初始化數(shù)據(jù)...");
            // 可以在這里調(diào)用數(shù)據(jù)庫(kù)服務(wù)或其他業(yè)務(wù)邏輯
        };
    }
}

總結(jié) 

到此這篇關(guān)于SpringBoot項(xiàng)目啟動(dòng)時(shí)初始化操作常見的幾種方式的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目啟動(dòng)時(shí)初始化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Http多次請(qǐng)求復(fù)用同一連接示例詳解

    Java Http多次請(qǐng)求復(fù)用同一連接示例詳解

    這篇文章主要為大家介紹了Java Http多次請(qǐng)求復(fù)用同一連接示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳解Java 反射和反射的應(yīng)用場(chǎng)景

    詳解Java 反射和反射的應(yīng)用場(chǎng)景

    這篇文章主要介紹了Java 反射和反射的應(yīng)用場(chǎng)景的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java反射的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-08-08
  • JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法

    JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于JAVA返回PDF文件流并進(jìn)行下載的實(shí)現(xiàn)方法,PDF文件流下載是通過HTTP協(xié)議將服務(wù)器上的PDF文件以流的方式發(fā)送給客戶端,供客戶端保存到本地磁盤或直接在瀏覽器中打開,需要的朋友可以參考下
    2024-02-02
  • Java21虛擬線程實(shí)踐

    Java21虛擬線程實(shí)踐

    java21正式版發(fā)布了,為我們帶來了很多新的特性,其中我最感興趣的就是虛擬線程,本文主要介紹了Java21虛擬線程實(shí)踐,感興趣的可以;了解一下
    2023-10-10
  • Java中Collection集合常用API之?Collection存儲(chǔ)自定義類型對(duì)象的示例代碼

    Java中Collection集合常用API之?Collection存儲(chǔ)自定義類型對(duì)象的示例代碼

    Collection是單列集合的祖宗接口,因此它的功能是全部單列集合都可以繼承使用的,這篇文章主要介紹了Java中Collection集合常用API?-?Collection存儲(chǔ)自定義類型對(duì)象,需要的朋友可以參考下
    2022-12-12
  • Java使用二分法進(jìn)行查找和排序的示例

    Java使用二分法進(jìn)行查找和排序的示例

    這篇文章主要介紹了Java使用二分法進(jìn)行查找和排序的示例,二分插入排序和二分查找是基礎(chǔ)的算法,需要的朋友可以參考下
    2016-04-04
  • java中switch選擇語(yǔ)句代碼詳解

    java中switch選擇語(yǔ)句代碼詳解

    這篇文章主要介紹了java中switch選擇語(yǔ)句代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot Shiro權(quán)限管理方式

    SpringBoot Shiro權(quán)限管理方式

    這篇文章主要介紹了SpringBoot Shiro權(quán)限管理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java圖片批量壓縮像素的實(shí)現(xiàn)方法

    Java圖片批量壓縮像素的實(shí)現(xiàn)方法

    我們開發(fā)中經(jīng)常會(huì)遇到原圖清晰度高,考慮到效率問題,我們不可能拿原圖進(jìn)行顯示,服務(wù)端一般都要對(duì)圖片進(jìn)行壓縮處理,然后發(fā)送給客戶端顯示,這篇文章主要給大家介紹了關(guān)于Java圖片批量壓縮像素的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2021-12-12
  • 詳細(xì)介紹Java函數(shù)式接口

    詳細(xì)介紹Java函數(shù)式接口

    函數(shù)式接口在Java中是指有且僅有一個(gè)抽象方法的接口。當(dāng)然接口中可以包含其他的方法默認(rèn)、靜態(tài)、私有,具體內(nèi)容請(qǐng)參考下面文章內(nèi)容
    2021-09-09

最新評(píng)論

酉阳| 游戏| 民乐县| 浦城县| 泗水县| 电白县| 加查县| 京山县| 晋城| 凤冈县| 饶阳县| 屏东市| 纳雍县| 关岭| 樟树市| 华阴市| 阳原县| 阿拉尔市| 南京市| 东安县| 交口县| 余姚市| 二手房| 沛县| 鹿邑县| 台东市| 庆云县| 峡江县| 手游| 松溪县| 万源市| 栾城县| 泽州县| 嵩明县| 普陀区| 宁海县| 古田县| 乐至县| 东方市| 岫岩| 来安县|