欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot項目啟動時初始化操作常見的幾種方式

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

一.前言    

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

    以下是常見的初始化場景:

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

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

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

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

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

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

二.常見的幾種方式    

1.使用 CommandLineRunner 或 ApplicationRunner 接口

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

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

CommandLineRunner 示例

@Component
public class StartupRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        // 在應(yīng)用啟動時執(zhí)行的初始化邏輯
        System.out.println("應(yīng)用啟動時執(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)用啟動時執(zhí)行初始化操作...");
    }
}

2.使用 @PostConstruct 注解

@PostConstruct 注解的方法會在 Spring 完成所有 bean 的初始化之后自動執(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ā)時執(zhí)行初始化操作。例如,ApplicationReadyEvent 事件在 Spring Boot 應(yīng)用完全啟動之后觸發(fā),ContextRefreshedEvent 事件在 Spring 上下文刷新之后觸發(fā)。

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

@Component
public class StartupEventListener {

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

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

@Component
public class ContextRefreshListener {

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

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

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

1、被spring管理        2、 實現(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 配置條件啟動

你可以通過 @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 支持通過配置自定義啟動時的 banner 內(nèi)容。這種方式適合顯示一些自定義的歡迎信息或者標(biāo)識。

@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ù)庫或其他資源)

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

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

@Configuration
public class DataInitConfig {

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

總結(jié) 

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

相關(guān)文章

  • springboot項目之相互依賴報錯問題(基于idea)

    springboot項目之相互依賴報錯問題(基于idea)

    這篇文章主要介紹了springboot項目之相互依賴報錯問題(基于idea),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Springboot框架整合添加redis緩存功能

    Springboot框架整合添加redis緩存功能

    緩存就是一個存儲器,在技術(shù)選型中,常用?Redis?作為緩存數(shù)據(jù)庫。緩存主要是在獲取資源方便性能優(yōu)化的關(guān)鍵方面。Redis?是一個高性能的?key-value?數(shù)據(jù)庫,接下來通過本文給大家介紹Springboot框架整合添加redis緩存功能,感興趣的朋友一起看看吧
    2021-11-11
  • java同步器AQS架構(gòu)AbstractQueuedSynchronizer原理解析下

    java同步器AQS架構(gòu)AbstractQueuedSynchronizer原理解析下

    這篇文章主要為大家介紹了java同步器AQS架構(gòu)AbstractQueuedSynchronizer原理解析下,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Java 深入淺出掌握Map集合之雙列集合

    Java 深入淺出掌握Map集合之雙列集合

    雙列集合是每個元素都有鍵與值兩部分組成的集合,記錄的是鍵值對對應(yīng)關(guān)系,即通過鍵可以找到值,鍵必須是唯一,值可以重復(fù),接下來跟著小編具體了解吧
    2021-11-11
  • 詳解Java Fibonacci Search斐波那契搜索算法代碼實現(xiàn)

    詳解Java Fibonacci Search斐波那契搜索算法代碼實現(xiàn)

    這篇文章主要介紹了詳解Java Fibonacci Search斐波那契搜索算法代碼實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java的JsonObject對象提取值方法

    java的JsonObject對象提取值方法

    下面小編就為大家分享一篇java的JsonObject對象提取值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Java實現(xiàn)一個簡單的緩存方法

    Java實現(xiàn)一個簡單的緩存方法

    本篇文章主要介紹了Java實現(xiàn)一個簡單的緩存方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 詳解SpringMVC 自動封裝枚舉類的方法

    詳解SpringMVC 自動封裝枚舉類的方法

    springmvc默認(rèn)無法自動封裝枚舉類,本篇文章主要介紹了詳解SpringMVC 自動封裝枚舉類的方法,有興趣的可以了解一下。
    2017-04-04
  • 一文搞清楚Java中Comparable和Comparator的區(qū)別

    一文搞清楚Java中Comparable和Comparator的區(qū)別

    Java中的Comparable和Comparator都是用于集合排序的接口,但它們有明顯的區(qū)別,文中通過一些實例代碼詳細(xì)介紹了Java中Comparable和Comparator的區(qū)別,感興趣的同學(xué)跟著小編一起學(xué)習(xí)吧
    2023-05-05
  • spring 整合 mybatis 中數(shù)據(jù)源的幾種配置方式(總結(jié)篇)

    spring 整合 mybatis 中數(shù)據(jù)源的幾種配置方式(總結(jié)篇)

    因為spring 整合mybatis的過程中, 有好幾種整合方式,尤其是數(shù)據(jù)源那塊,經(jīng)??吹讲灰粯拥呐渲梅绞?,總感覺有點亂,所以今天有空總結(jié)下,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05

最新評論