亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring?boot讀取外部化配置的方法

 更新時間:2022年02月08日 15:23:52   作者:、楽.  
大家好,本篇文章主要講的是Spring?boot讀取外部化配置的方法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下

這篇文章我們主要討論 Spring Boot 的外部化配置功能,該功能主要是通過外部的配置資源實現(xiàn)與代碼的相互配合,來避免硬編碼,提供應用數(shù)據(jù)或行為變化的靈活性。本文主要記錄讀取外部化配置的幾種常見的操作方式,相關原理不在此記錄。

1. Properties / YAML

我們一般會將相關配置信息寫在Properties / YAML文件中,然后在通過某種方式來進行數(shù)據(jù)的獲取。

比如下圖我就定義了三個參數(shù):

image-20220207114246144

1.1 Environment

首先我們可以通過Environment來進行外部配置信息的加載(Spring Boot中的所有外部化配置都會加載到Environment中)。

首先我們直接通過Autowired注入Environment:

@Autowired
Environment environment;

然后直接獲取數(shù)據(jù)信息即可。

@RestController
public class ConfigController {

    @Autowired
    Environment environment;

    @GetMapping("/env")
    public String env() {
        return environment.getProperty("name") + "\n";
    }
}

1.2 Value注解

第二種方式就是我們比較常用的注解方式,直接通過注解寫入相應的KEY,獲取對應的value。如果沒有KEY值則啟動的時候會報錯。

@Value("${name}")
private String name;

2. 自定義Properties文件

有的時候可能我們的外部化配置不是寫在application.properties中,而是寫在一些自定義Properties中,那這個時候我們?nèi)绾瓮ㄟ^value注解獲取其中的數(shù)據(jù)呢?

image-20220207140750562

在上面說environment的時候,我們知道Spring Boot中的所有外部化配置都會加載到Environment中,我們可以在Spring boot構建environment之前對其進行相關的修改。

我們可以通過實現(xiàn)EnvironmentPostProcessor接口并重寫postProcessEnvironment方法來對environment進行修改。

整體流程如下:

實現(xiàn)接口,重寫方法

定義Properties,以及我們需要獲取數(shù)據(jù)文件的名字。

解析文件將數(shù)據(jù)添加至environment中

public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor {

    private final Properties properties = new Properties();

    private String propertiesFile = "custom.properties";

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        Resource resource = new ClassPathResource(propertiesFile);
        environment.getPropertySources().addLast(loadProperties(resource));
    }

    private PropertySource<?> loadProperties(Resource resource) {
        if (!resource.exists()) {
            throw new RuntimeException("file not exist");
        }
        try {
            //custom.properties
            properties.load(resource.getInputStream());
            return new PropertiesPropertySource(resource.getFilename(), properties);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

這個時候代碼寫好之后,我們可以通過value注解獲取數(shù)據(jù)了嗎?我們運行試試。(記得將application.properties中的數(shù)據(jù)清空)

image-20220207144117785

這個時候我們會發(fā)現(xiàn)運行失敗,沒有找到對應key。這是為什么呢?這是由于以上都是我們對Spring boot功能的拓展,做這種功能拓展的時候,我們需要使用到我們的SPI機制,按照拓展規(guī)則去定義我們的拓展實現(xiàn)。這樣才能使我們的拓展點生效。

這里和JAVA做SPI機制的實現(xiàn)不一樣,之前做SPI都是創(chuàng)建的全類名文件,然后寫對應的實現(xiàn)類,這邊文件名需要定義為spring.factories。

org.springframework.boot.env.EnvironmentPostProcessor=\
  com.example.springbootzookeeper.CustomEnvironmentPostProcessor

image-20220207143746583

這個時候我們重新運行項目,可以發(fā)現(xiàn)成功運行。

3. 其他命令參數(shù)

Spring boot 中我們是有很多種外部化配置的方式,比如環(huán)境變量、系統(tǒng)變量、命令行參數(shù)等。我們在下方演示一種類型的外部化配置:我們可以通過這種-D形式進行外部化配置。value注解后面的key對應-D后面的key。

image-20220207133637849

@Value("${test}")
private String command;

總結

到此這篇關于Spring boot讀取外部化配置的方法的文章就介紹到這了,更多相關Spring boot外部化配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring boot整合Springfox生成restful的在線api文檔

    Spring boot整合Springfox生成restful的在線api文檔

    這篇文章主要為大家介紹了Spring boot整合Springfox生成restful在線api文檔,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • java 注解的基礎詳細介紹

    java 注解的基礎詳細介紹

    這篇文章主要介紹了java 注解的基礎詳細介紹的相關資料,希望通過本文大家能掌握注解的使用方法,需要的朋友可以參考下
    2017-09-09
  • Java中final,finally,finalize?有什么區(qū)別

    Java中final,finally,finalize?有什么區(qū)別

    這篇文章主要給大家分享的是?Java中final,finally,finalize?到底有什么區(qū)別,文章圍繞final,finally,finalize的相關資料展開詳細內(nèi)容,具有一定的參考的價值,需要的朋友可以參考一下
    2021-11-11
  • SpringSecurity+Redis認證過程小結

    SpringSecurity+Redis認證過程小結

    這篇文章主要介紹了SpringSecurity+Redis認證過程小結,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • SpringBoot+Vue+Axios+BootStrap實現(xiàn)圖書的增刪改查功能示例

    SpringBoot+Vue+Axios+BootStrap實現(xiàn)圖書的增刪改查功能示例

    本文主要介紹了SpringBoot+Vue+Axios+BootStrap實現(xiàn)圖書的增刪改查功能,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 五種Java多線程同步的方法

    五種Java多線程同步的方法

    這篇文章主要為大家詳細介紹了五種Java多線程同步的方法,需要的朋友可以參考下
    2015-09-09
  • 使用vscode搭建javaweb項目的詳細步驟

    使用vscode搭建javaweb項目的詳細步驟

    我個人是很喜歡VsCode的,開源免費、功能全面,所以為了方便,我把我?guī)缀跛械倪\行都集成到了VsCode上來,JavaWeb也不例外,下面這篇文章主要給大家介紹了關于使用vscode搭建javaweb項目的相關資料,需要的朋友可以參考下
    2022-11-11
  • 如何區(qū)分JAVA中的equals與==

    如何區(qū)分JAVA中的equals與==

    這篇文章主要介紹了如何區(qū)分JAVA中的equals與==,文章簡單易懂,實例代碼幫助大家更好的參考學習,感興趣的朋友可以了解下
    2020-06-06
  • 關于Java8的foreach中使用return/break/continue產(chǎn)生的問題

    關于Java8的foreach中使用return/break/continue產(chǎn)生的問題

    這篇文章主要介紹了關于Java8的foreach()中使用return/break/continue產(chǎn)生的問題,在使用foreach()處理集合時不能使用break和continue這兩個方法,也就是說不能按照普通的for循環(huán)遍歷集合時那樣根據(jù)條件來中止遍歷,需要的朋友可以參考下
    2023-10-10
  • 關于@ApiModel和@ApiModelProperty的使用

    關于@ApiModel和@ApiModelProperty的使用

    這篇文章主要介紹了關于@ApiModel和@ApiModelProperty的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論