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

springboot如何獲取yaml/yml(或properties)配置文件信息

 更新時間:2024年11月04日 11:02:23   作者:YD_1989  
在SpringBoot項目中,讀取配置文件信息是常見需求,可以通過@Autowired注入Environment類,使用@Value注解直接注入配置信息,或定義工具類結合ApplicationRunner進行高級配置信息獲取,特別提到

springboot項目獲取配置文件信息

前言

在分布式項目開發(fā)中,通常會使用配置中心(例如:Apollo 配置中心)將配置文件和項目解耦。

為了更具靈活性,有時候需要把一些數(shù)據(jù)放在配置文件中獲取,能夠減少很多麻煩,這個時候就需要讀取配置文件信息。

本文結合實際開發(fā)介紹幾種使用過的讀取配置文件的方法。

首先在配置文件中配置一條數(shù)據(jù):

spring.application.name = user-service

1、@Autowired 注入 Environment類

和項目中注入 service 或者 mapper 一樣,聲明一個 Environment 類變量,加上 @Autowire 注解。

如下:

    @Autowired
    private Environment environment;

該類所屬包:

import org.springframework.core.env.Environment;

代碼獲取配置:

String applicationName = environment.getProperty("spring.application.name");

注意:key一定要寫完整,有幾層就寫幾層,每層的名字用點分隔。

但是,使用該方法具有一定的局限性。

局限性1:使用在靜態(tài)方法中

如果要在靜態(tài)方法中讀取配置信息,不能簡單的將 Environment 定義成 static 就完了,由于注入機制,注入一個靜態(tài)的 bean 只會得到一個空的 bean,即變量的值為 null,一旦使用該 bean 對象就會報空指針異常。

錯誤使用方法:

    @Autowired
    private static Environment environment;//只定義成靜態(tài)變量,environment 只會是null
	public static void m1(){
		// 一旦使用environment變量就會報空指針異常
		String applicationName = environment.getProperty("spring.application.name");	
	}

正確使用方法:

  1. 將 Environment 定義成 static 靜態(tài)變量
  2. 加上 environment 的 getter/setter 方法
  3. 將@Autowire注解加到set方法上

需要注意的是,只需要 get 方法是靜態(tài)的即可,set 方法不要靜態(tài),否則得到的 environment 還是null。

正確代碼如下:

	private static Environment environment;

    @Autowired
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

    public static Environment getEnvironment() {
        return environment;
    }

局限性2:無法直接讀取自定義的Yml配置文件

Environment 無法直接讀取自定義的配置文件,需要通過增加一個配置類,將自定義的配置文件暴露到spring environment 中。

解決方法:

定義一個配置類,將自定義的配置文件內容加載到 Environment 中,代碼如下:

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;

/**
 * 配置類
 * @Description 讀取自定義Yml格式配置文件
 */
@Component
public class JdbcConfig {
    @Bean
    public PropertySourcesPlaceholderConfigurer getSqlConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean sqlConfigBean = new YamlPropertiesFactoryBean();
        sqlConfigBean.setResources(new ClassPathResource("jdbc-properties.yml"));
        configurer.setProperties(sqlConfigBean.getObject());
        return configurer;
    }
}

寫好配置類,就可以通過注解 @Autowired 注入 Environment 類來讀取自定義配置信息了。

2、基礎用法,使用@Value注解直接注入配置信息

使用方式:

@Value(“${xxx.xxx.xxx}”)

代碼如下:

    @Value("${spring.application.name}")
    private String applicationName;

注意:該方法也具有上述局限性。

3、進階方法(推薦使用)

定義一個工具類,使用 @Component 注解使其成為配置類,繼承ApplicationRunner 重寫run()方法,再注入 Environment 獲取配置,這樣當項目啟動好之后,配置的信息就已經(jīng)加載完畢,可以做到在任何地方隨時隨地獲取配置信息。

代碼如下:

配置類:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Component
public class BaseConfig implements ApplicationRunner {

    @Autowired
    private Environment  environment;

    public static String applicationName;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        applicationName = environment.getProperty("spring.application.name");

    }
}

使用:直接用調用工具類的靜態(tài)屬性即可獲取配置信息。

    @PostMapping(value = "/test/config")
    public List<String> testConfig() {
        List<String> list = new ArrayList<String>();
        list.add(BaseConfig.applicationName);
        return list;
    }

postman 測試結果:

拓展:springboot 集成配置中心 - 以 Apollo 為例

微服務中會使用配置中心管理配置文件信息,springBoot 通常會和這些配置中心集成提供一些方法獲取配置信息,本文以 Apollo 配置中心為例展示如何獲取配置信息。

  • (1)添加依賴
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>red-apollo-client</artifactId>
</dependency>
  • (2)代碼使用
Config config = ConfigService.getAppConfig();// 連接到 ConfigService 的 DEV/SIT/UAT/PROD 等環(huán)境
String applicationName = config.getProperty("spring.application.name", ""); // 獲取配置信息

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 從HelloWorld和文檔注釋開始入門Java編程

    從HelloWorld和文檔注釋開始入門Java編程

    這篇文章主要介紹了從HelloWorld和文檔注釋開始入門Java編程,涉及到Javadoc工具的使用,需要的朋友可以參考下
    2015-10-10
  • IDEA的Terminal無法執(zhí)行git命令問題

    IDEA的Terminal無法執(zhí)行git命令問題

    這篇文章主要介紹了IDEA的Terminal無法執(zhí)行git命令問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 詳解Java中類的加載與其初始化

    詳解Java中類的加載與其初始化

    這篇文章主要為大家詳細介紹了Java中類的加載與其初始化的相關資料,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2022-12-12
  • SpringBoot結合Redis配置工具類實現(xiàn)動態(tài)切換庫

    SpringBoot結合Redis配置工具類實現(xiàn)動態(tài)切換庫

    本文主要介紹了SpringBoot結合Redis配置工具類實現(xiàn)動態(tài)切換庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • springboot整合JavaCV實現(xiàn)視頻截取第N幀并保存圖片

    springboot整合JavaCV實現(xiàn)視頻截取第N幀并保存圖片

    這篇文章主要為大家詳細介紹了springboot如何整合JavaCV實現(xiàn)視頻截取第N幀并保存為圖片,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-08-08
  • Spring整合Kaptcha谷歌驗證碼工具的開發(fā)步驟

    Spring整合Kaptcha谷歌驗證碼工具的開發(fā)步驟

    這篇文章主要介紹了Spring整合Kaptcha谷歌驗證碼工具的開發(fā)步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • springboot jpa分庫分表項目實現(xiàn)過程詳解

    springboot jpa分庫分表項目實現(xiàn)過程詳解

    這篇文章主要介紹了springboot jpa分庫分表項目實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Log4j如何屏蔽某個類的日志打印

    Log4j如何屏蔽某個類的日志打印

    這篇文章主要介紹了Log4j如何屏蔽某個類的日志打印,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot監(jiān)聽事件和處理事件程序示例詳解

    SpringBoot監(jiān)聽事件和處理事件程序示例詳解

    這篇文章主要介紹了SpringBoot監(jiān)聽事件和處理事件程序示例,監(jiān)聽和處理事件是一種常用的模式,用于在應用程序的不同部分之間傳遞信息,Spring 的事件發(fā)布/訂閱模型允許我們創(chuàng)建自定義事件,并在這些事件發(fā)生時由注冊的監(jiān)聽器進行處理,需要的朋友可以參考下
    2022-06-06
  • MyBatis中調用存儲過程和函數(shù)的實現(xiàn)示例

    MyBatis中調用存儲過程和函數(shù)的實現(xiàn)示例

    在MyBatis中調用存儲過程和函數(shù)是一個相對高級的特性,本文主要介紹了MyBatis中調用存儲過程和函數(shù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07

最新評論