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

SpringBoot中讀取配置的七種方法總結(jié)

 更新時間:2024年08月07日 11:13:11   作者:碼到三十五  
在Spring Boot應(yīng)用中,讀取配置是一項基礎(chǔ)且重要的任務(wù),Spring Boot提供了多種靈活的方式來讀取配置,以滿足不同場景下的需求,本文將詳細介紹Spring Boot中讀取配置的幾種常用方法,需要的朋友可以參考下

引言

在Spring Boot應(yīng)用中,讀取配置是一項基礎(chǔ)且重要的任務(wù)。Spring Boot提供了多種靈活的方式來讀取配置,以滿足不同場景下的需求。本文將詳細介紹Spring Boot中讀取配置的幾種常用方法.

1. 使用@Value注解

@Value注解是最直接且常用的讀取配置的方式。它可以將配置文件中的屬性值注入到Spring管理的Bean的字段中。

@Component
public class MyBean {
    @Value("${some.key1}")
    private String someKey1;

     @Value("${some.key2:defaultVal}")
    private String someKey2;

    public void initSomeKey3(@Value("${some.key3}")String key){
        ...
    }
}
  • @Value注解只能讀取單個配置進行賦值,無法讀取整個配置文件批量賦值
  • 可以在屬性名稱后面使用冒號(:default-value)的形式添加默認值
  • 只能用于被Spring管理的Bean中使用,或Java配置@Configuration類
  • 可以用于字段、構(gòu)造函數(shù)參數(shù)、方法參數(shù)和方法上。當將它放在方法上時,Spring容器初始化時會調(diào)用該方法,并將配置屬性的值作為方法的參數(shù)傳遞進去.

2. 使用ConfigurationProperties注解

ConfigurationProperties注解允許將配置文件的屬性綁定到一個Bean上,這樣可以更方便地管理和使用配置信息。與@Value注解相比,ConfigurationProperties支持復(fù)雜類型的配置,如列表、集合等。

@Component
@ConfigurationProperties(prefix = "some")
public class SomeProperties {
    private String key;
    private List<String> values;

    // ... getters and setters
}

@ConfigurationProperties使用注意事項:

  1. 配置文件屬性名與類字段名的映射規(guī)則

    • 默認情況下,@ConfigurationProperties會將配置文件中的屬性名與類字段名進行映射。例如,配置文件中的student.name會自動映射到類字段name上。
    • 如果配置文件中的屬性名與類字段名不一致,可以使用@Value注解或通過setter方法來指定映射關(guān)系。
  2. 支持類型轉(zhuǎn)換
    @ConfigurationProperties支持自動類型轉(zhuǎn)換,能夠?qū)⑴渲梦募械淖址缔D(zhuǎn)換為目標字段的類型。例如,將字符串轉(zhuǎn)換為整數(shù)、布爾值等。如果無法進行類型轉(zhuǎn)換,會拋出異常。

  3. 默認值和可選屬性

    • 可以為@ConfigurationProperties注解的字段設(shè)置默認值,以防止配置文件中缺少對應(yīng)的屬性??梢允褂?quot;:"符號指定默認值,例如@Value("${my.property:default-value}")。
    • 另外,可以使用required屬性來指定某個屬性是否為必需的。
  4. 配置項的驗證和校驗
    可以使用JSR-303/349規(guī)范的注解對@ConfigurationProperties注解的字段進行驗證和校驗。例如,使用@NotBlank、@Min、@Max等注解來限制屬性值的有效性。

3. 使用Environment對象

Environment對象提供了訪問配置信息的方法。可以通過注入Environment對象來獲取配置屬性值。

@Component
public class MyBean {
    private final Environment environment;

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

    public void someMethod() {
        String someKey = environment.getProperty("some.key");
        // ...
    }
}

// 通過獲取Environment 
@Component
public class MyEnvironmentAware implements EnvironmentAware {

    private Environment env;
    
    @Override
    public void setEnvironment(Environment environment) {
        this.env = environment;
    }

    public String getKey() {
        return env.getProperty("some.key");
    }
}

4. 使用@PropertySource注解

@PropertySource注解允許指定額外的屬性文件作為配置源。這對于讀取非application.propertiesapplication.yml文件中的配置非常有用。

/**
 * 綁定自定義properties配置
*/
@Data
@Configuration
@PropertySource("classpath:custom.properties")
public class MyPropertiesComponent {
    @Value("${some.key}")
    private String someKey;

    // ...
}

5. 自定義配置文件讀取

在某些情況下,需要讀取非標準的配置文件(如JSON、XML等)。這時,可以通過編寫自定義的配置文件讀取邏輯來實現(xiàn)。例如,使用Jackson庫來讀取JSON配置文件。

@Service
public class ConfigService {
    private MyConfig config;

    @PostConstruct
    public void init() throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        InputStream inputStream = new ClassPathResource("config.json").getInputStream();
        this.config = mapper.readValue(inputStream, MyConfig.class);
    }

    // ... 使用config的方法
}

6. 使用命令行參數(shù)

Spring Boot應(yīng)用也支持通過命令行參數(shù)來傳遞配置信息??梢酝ㄟ^實現(xiàn)CommandLineRunner接口來訪問命令行參數(shù)。

import org.springframework.boot.CommandLineRunner;  
import org.springframework.stereotype.Component;  
  
@Component  
public class CommandLineAppStartupRunner implements CommandLineRunner {  
  
    @Override  
    public void run(String... args) throws Exception {  
        if (args.length > 0) {  
            System.out.println("接收到命令行參數(shù):");  
            for (String arg : args) {  
                System.out.println(arg);  
            }  
        } else {  
            System.out.println("沒有接收到命令行參數(shù)。");  
        }  
    }  
}

打包并運行Spring Boot應(yīng)用。在運行時通過命令行傳遞參數(shù)。

java -jar your-spring-boot-app.jar arg1 arg2 arg3

arg1、arg2和arg3是作為命令行參數(shù)傳遞給應(yīng)用的.

7. 使用Spring Expression Language (SpEL)

SpEL可以在@Value注解中使用,以更復(fù)雜的表達式形式來讀取配置值。例如,可以結(jié)合系統(tǒng)屬性或環(huán)境變量來動態(tài)獲取配置。

@Value("#{systemProperties['some.key'] ?: 'default'}")
private String someKey;

結(jié)論

Spring Boot提供了多種靈活且強大的方式來讀取配置信息。開發(fā)者可以根據(jù)具體需求和場景選擇最適合的方法來管理和使用配置。無論是簡單的鍵值對還是復(fù)雜的配置結(jié)構(gòu),Spring Boot都能提供相應(yīng)的支持來簡化配置讀取的過程。

以上就是SpringBoot中讀取配置的七種方法總結(jié)的詳細內(nèi)容,更多關(guān)于SpringBoot讀取配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringData JPA中查詢接口Repository的使用

    SpringData JPA中查詢接口Repository的使用

    本文主要介紹了SpringData JPA中查詢接口Repository的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 以實例講解Objective-C中的KVO與KVC機制

    以實例講解Objective-C中的KVO與KVC機制

    這篇文章主要介紹了以實例講解Objective-C中的KVO與KVC機制,即Key-Value-Observing與Key-Value-Coding,需要的朋友可以參考下
    2015-09-09
  • springboot連接Redis的教程詳解

    springboot連接Redis的教程詳解

    這篇文章主要介紹了springboot連接Redis的教程詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • JVM 方法調(diào)用之靜態(tài)分派(詳解)

    JVM 方法調(diào)用之靜態(tài)分派(詳解)

    下面小編就為大家?guī)硪黄狫VM 方法調(diào)用之靜態(tài)分派(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • c#和java base64不一致的解決方法

    c#和java base64不一致的解決方法

    最近非常郁悶的處理這個base64的問題,同樣的一個圖片文件,在java和c#進行base64編碼后結(jié)果不一樣,苦惱了很久,下面這篇文章主要給大家介紹了關(guān)于c#和java base64不一致的解決方法,需要的朋友可以參考下
    2018-11-11
  • Mybatis-plus中IService接口的基本使用步驟

    Mybatis-plus中IService接口的基本使用步驟

    Mybatis-plus是一個Mybatis的增強工具,它提供了很多便捷的方法來簡化開發(fā),IService是Mybatis-plus提供的通用service接口,封裝了常用的數(shù)據(jù)庫操作方法,包括增刪改查等,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus中IService接口的基本使用步驟,需要的朋友可以參考下
    2023-06-06
  • Java Swing實現(xiàn)自定義日期時間選擇器組件

    Java Swing實現(xiàn)自定義日期時間選擇器組件

    Swing 原生沒有好用的日期時間選擇器組件,如果想讓用戶選擇日期,通常只能用手寫文本框加格式校驗,代碼繁瑣且體驗一般,下面小編就和大家分享一下Java Swing實現(xiàn)自定義日期時間選擇器的相關(guān)方法吧
    2026-05-05
  • 使用JPA插入枚舉類型字段

    使用JPA插入枚舉類型字段

    這篇文章主要介紹了使用JPA插入枚舉類型字段,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 深入理解Java動態(tài)代理與靜態(tài)代理

    深入理解Java動態(tài)代理與靜態(tài)代理

    這篇文章主要介紹了深入理解Java動態(tài)代理與靜態(tài)代理,靜態(tài)代理,代理類和被代理的類實現(xiàn)了同樣的接口,代理類同時持有被代理類的引用,動態(tài)代理的根據(jù)實現(xiàn)方式的不同可以分為JDK動態(tài)代理和CGlib動態(tài)代理
    2022-06-06
  • Spring超詳細講解事務(wù)

    Spring超詳細講解事務(wù)

    Spring事務(wù)的本質(zhì)就是對數(shù)據(jù)庫事務(wù)的支持,沒有數(shù)據(jù)庫事務(wù),Spring是無法提供事務(wù)功能的。Spring只提供統(tǒng)一的事務(wù)管理接口,具體實現(xiàn)都是由數(shù)據(jù)庫自己實現(xiàn)的,Spring會在事務(wù)開始時,根據(jù)當前設(shè)置的隔離級別,調(diào)整數(shù)據(jù)庫的隔離級別,由此保持一致
    2022-07-07

最新評論

盐池县| 克拉玛依市| 伊金霍洛旗| 怀安县| 海城市| 封丘县| 连平县| 白朗县| 林甸县| 嘉定区| 屯留县| 两当县| 中山市| 白山市| 安泽县| 乌鲁木齐市| 云浮市| 延寿县| 平顶山市| 清水县| 陆丰市| 吉水县| 习水县| 江安县| 惠安县| 扶风县| 青川县| 卫辉市| 丹棱县| 富源县| 江孜县| 长子县| 宣威市| 开远市| 青铜峡市| 绥滨县| 杭锦后旗| 北碚区| 合江县| 溆浦县| 工布江达县|