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

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

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

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

1. Properties / YAML

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

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

image-20220207114246144

1.1 Environment

首先我們可以通過Environment來進(jìn)行外部配置信息的加載(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注解

第二種方式就是我們比較常用的注解方式,直接通過注解寫入相應(yīng)的KEY,獲取對應(yīng)的value。如果沒有KEY值則啟動(dòng)的時(shí)候會報(bào)錯(cuò)。

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

2. 自定義Properties文件

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

image-20220207140750562

在上面說environment的時(shí)候,我們知道Spring Boot中的所有外部化配置都會加載到Environment中,我們可以在Spring boot構(gòu)建environment之前對其進(jìn)行相關(guān)的修改。

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

整體流程如下:

實(shí)現(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);
        }
    }
}

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

image-20220207144117785

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

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

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

image-20220207143746583

這個(gè)時(shí)候我們重新運(yùn)行項(xiàng)目,可以發(fā)現(xiàn)成功運(yùn)行。

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

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

image-20220207133637849

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

總結(jié)

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

相關(guān)文章

  • 解析Java線程編程中的線程安全與synchronized的使用

    解析Java線程編程中的線程安全與synchronized的使用

    這篇文章主要介紹了Java線程編程中的線程安全與synchronized的使用,synchronized多線程使用時(shí)一定要注意線程之間的沖突問題,需要的朋友可以參考下
    2015-12-12
  • Java深入淺出講解多線程的概念到使用

    Java深入淺出講解多線程的概念到使用

    哈哈!經(jīng)過一個(gè)階段的學(xué)習(xí),Java基礎(chǔ)知識學(xué)習(xí)終于到多線程了!Java多線程以及后面互斥鎖的概念都是Java基礎(chǔ)學(xué)習(xí)的難點(diǎn),所以我做了一個(gè)總結(jié),希望對大家也有幫助
    2022-05-05
  • java實(shí)現(xiàn)多客戶聊天功能

    java實(shí)現(xiàn)多客戶聊天功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多客戶聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java中的位運(yùn)算符、移位運(yùn)算詳細(xì)介紹

    Java中的位運(yùn)算符、移位運(yùn)算詳細(xì)介紹

    這篇文章主要介紹了Java中的位運(yùn)算符、移位運(yùn)算,有需要的朋友可以參考一下
    2013-12-12
  • mybatis-plus實(shí)現(xiàn)打印完整sql語句

    mybatis-plus實(shí)現(xiàn)打印完整sql語句

    這篇文章主要介紹了mybatis-plus實(shí)現(xiàn)打印完整sql語句方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 如何將復(fù)雜SQL轉(zhuǎn)換成Java對象的實(shí)例講解

    如何將復(fù)雜SQL轉(zhuǎn)換成Java對象的實(shí)例講解

    轉(zhuǎn)換復(fù)雜SQL到Java代碼,我們需要確定數(shù)據(jù)庫連接方式和工具,使用JDBC的API來連接數(shù)據(jù)庫、執(zhí)行SQL語句,復(fù)雜SQL語句可以被拆分為多個(gè)步驟,每個(gè)步驟執(zhí)行一個(gè)特定的操作,通過將SQL語句拆分為多個(gè)步驟,我們可以更好地理解復(fù)雜SQL的邏輯,并且更容易將其轉(zhuǎn)換為Java代碼
    2024-05-05
  • Java多線程中的ReentrantLock可中斷鎖詳細(xì)解讀

    Java多線程中的ReentrantLock可中斷鎖詳細(xì)解讀

    這篇文章主要介紹了Java多線程中的ReentrantLock可中斷鎖詳細(xì)解讀,ReentrantLock中的lockInterruptibly()方法使得線程可以在被阻塞時(shí)響應(yīng)中斷,比如一個(gè)線程t1通過lockInterruptibly()方法獲取到一個(gè)可重入鎖,并執(zhí)行一個(gè)長時(shí)間的任務(wù),需要的朋友可以參考下
    2023-12-12
  • SpringBoot+LayIM+t-io 實(shí)現(xiàn)好友申請通知流程

    SpringBoot+LayIM+t-io 實(shí)現(xiàn)好友申請通知流程

    這篇文章主要介紹了 SpringBoot+LayIM+t-io 實(shí)現(xiàn)好友申請通知流程,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-12-12
  • Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    這篇文章主要給大家介紹了關(guān)于Java請求調(diào)用參數(shù)格式為form-data類型的接口的相關(guān)資料,文中給出了詳細(xì)的代碼示例,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • SpringCloud實(shí)現(xiàn)灰度發(fā)布的方法步驟

    SpringCloud實(shí)現(xiàn)灰度發(fā)布的方法步驟

    本文主要介紹了SpringCloud實(shí)現(xiàn)灰度發(fā)布的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評論

萨迦县| 崇左市| 安福县| 青海省| 三门峡市| 哈密市| 钟山县| 体育| 定南县| 商河县| 新乐市| 夏河县| 辉县市| 敦煌市| 嘉黎县| 定安县| 扬州市| 迭部县| 松江区| 房产| 巴南区| 阳泉市| 库伦旗| 双牌县| 延川县| 海南省| 敦煌市| 韩城市| 额敏县| 东莞市| 绿春县| 同仁县| 班玛县| 工布江达县| 大竹县| 卫辉市| 二连浩特市| 宜昌市| 靖宇县| 华蓥市| 嘉禾县|