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

@ConfigurationProperties加載外部配置方式

 更新時間:2023年03月13日 09:48:16   作者:oneslide  
這篇文章主要介紹了@ConfigurationProperties加載外部配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@ConfigurationProperties加載外部配置

@ConfigurationProperties可以將外部配置文件(比如applicaition.properties)加載進來,填充對象的對應(yīng)字段的數(shù)據(jù),然后供其他Bean使用。

整個項目結(jié)構(gòu)是這樣的:

在這里插入圖片描述

這里我寫了一個外部配置文件(application.yml):

environment:
  production:
    url: http://production.example.com
    name: production mode
  dev:
    url: http://dev.example.com
    name: developer mode

可以看見配置文件的數(shù)據(jù)有結(jié)構(gòu)化特點,即可以生成一個相應(yīng)的對象。

應(yīng)該是這個樣子:

class Environment{
     Production production;
     Dev dev;
     class Production{
           String url;
           String name;
     }
     class Dev{
           String url;
           String name;
     }
}

真實的代碼是這個樣子:

在這里插入圖片描述

@Configuration   //配置類注解,被自動掃描發(fā)現(xiàn)
@PropertySource("classpath:application.yml") //指明配置源文件位置
@ConfigurationProperties("environment") //指明前綴
public class EnvConfig {
    private final Dev dev=new Dev();
    private final Production production=new Production();


    public Dev getDev() {
        return dev;
    }
   //getXXX必須中xxx和字段名production嚴格一致,否則出異常,即使松弛綁定,也要這樣
    public Production getProduction() {
        return production;
    }

    public static class Dev{
        private String url;
        private String name;

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
        //toString
    }
    public static class Production{
        private String url;
        private String name;
        //setter and getter省略
       //toString
    }
   //toString()
}

下面測試一下:

@Controller
public class TestStaticController {
    Logger log= LoggerFactory.getLogger(TestStaticController.class);
    @Autowired
    public EnvConfig env;

    @GetMapping("/envtest")
    public String getEnv(){
        log.info(this.env.toString());
        return "test";
    }
}

通過發(fā)送HTTP請求,將會在日志中看到:

可以看見,外部配置文件填充了對象EnvConfig,并可以被容器自動注入到其他對象中。

另外,外部配置文件映射成對象還有其他技術(shù)如:映射成數(shù)組,Map…

@ConfigurationProperties與@EnableConfigurationProperties

@EnableConfigurationProperties注解的作用是:使用 @ConfigurationProperties 注解的類生效。

如果一個配置類只配置@ConfigurationProperties注解,而沒有使用@Component,那么在IOC容器中是獲取不到properties 配置文件轉(zhuǎn)化的bean。說白了 @EnableConfigurationProperties 相當于把使用 @ConfigurationProperties 的類進行了一次注入

@EnableConfigurationProperties 文檔中解釋:

當@EnableConfigurationProperties注解應(yīng)用到你的@Configuration時, 任何被@ConfigurationProperties注解的beans將自動被Environment屬性配置。 這種風格的配置特別適合與SpringApplication的外部YAML配置進行配合使用。

@ConfigurationProperties(prefix = "service.properties")
public class HelloServiceProperties {
    private static final String SERVICE_NAME = "test-service";

    private String msg = SERVICE_NAME;
       set/get
}


@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello", value = "enable", matchIfMissing = true)
public class HelloServiceAutoConfiguration {

}

@RestController
public class ConfigurationPropertiesController {

    @Autowired
    private HelloServiceProperties helloServiceProperties;

    @RequestMapping("/getObjectProperties")
    public Object getObjectProperties () {
        System.out.println(helloServiceProperties.getMsg());
        return myConfigTest.getProperties();
    }
}

自動配置設(shè)置(只是在配置文件的)

service.properties.name=my-test-name
service.properties.ip=192.168.1.1
service.user=kayle
service.port=8080

一切正常,但是 HelloServiceAutoConfiguration 頭部不使用 @EnableConfigurationProperties,測訪問報錯。

不使用 @EnableConfigurationProperties 進行注冊,使用 @Component 注冊

@ConfigurationProperties(prefix = "service.properties")
@Component
public class HelloServiceProperties {
    private static final String SERVICE_NAME = "test-service";

    private String msg = SERVICE_NAME;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

}

Controller 不變,一切正常,如果注釋掉 @Component 測啟動報錯。

由此證明,兩種方式都是將被 @ConfigurationProperties 修飾的類,加載到 Spring Env 中

總結(jié)

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

相關(guān)文章

  • Java實現(xiàn)登錄密碼強度校驗的項目實踐

    Java實現(xiàn)登錄密碼強度校驗的項目實踐

    本文主要介紹了Java實現(xiàn)登錄密碼強度校驗的項目實踐,包括使用正則表達式匹配校驗和密碼強度校驗工具類這兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringBoot配置lombok與logback過程解析

    SpringBoot配置lombok與logback過程解析

    這篇文章主要介紹了SpringBoot配置lombok與logback過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java日常練習題,每天進步一點點(51)

    Java日常練習題,每天進步一點點(51)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • java環(huán)境變量如何配置

    java環(huán)境變量如何配置

    這篇文章主要為大家詳細介紹了java環(huán)境變量配置教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java日常練習題,每天進步一點點(10)

    Java日常練習題,每天進步一點點(10)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • java高并發(fā)InterruptedException異常引發(fā)思考

    java高并發(fā)InterruptedException異常引發(fā)思考

    這篇文章主要為大家介紹了java高并發(fā)InterruptedException異常引發(fā)思考,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • SpringBoot中給指定接口加上權(quán)限校驗的實現(xiàn)

    SpringBoot中給指定接口加上權(quán)限校驗的實現(xiàn)

    本文介紹了使用SpringSecurity為接口添加權(quán)限校驗,以防止外部訪問并確保安全性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • Java實現(xiàn)猜數(shù)字小游戲(有次數(shù)限制)

    Java實現(xiàn)猜數(shù)字小游戲(有次數(shù)限制)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)猜數(shù)字小游戲,有次數(shù)限制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • mybatis?plus配置自動create_time和update_time方式

    mybatis?plus配置自動create_time和update_time方式

    在處理數(shù)據(jù)時,注意時間類型的轉(zhuǎn)換非常重要,不同編程環(huán)境和數(shù)據(jù)庫對時間數(shù)據(jù)的處理方式各異,因此在數(shù)據(jù)遷移或日常處理中需謹慎處理時間格式,個人經(jīng)驗表明,了解常用的時間轉(zhuǎn)換函數(shù)和方法能有效避免錯誤,提高工作效率,希望這些經(jīng)驗?zāi)転榇蠹規(guī)韼椭?/div> 2024-09-09
  • logback關(guān)閉某個包的日志操作

    logback關(guān)閉某個包的日志操作

    這篇文章主要介紹了logback關(guān)閉某個包的日志操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

山西省| 津南区| 西青区| 昌图县| 呼玛县| 赣榆县| 瑞安市| 荆州市| 武邑县| 县级市| 蒙阴县| 吉木萨尔县| 措美县| 五大连池市| 扎鲁特旗| 瑞安市| 南召县| 泰和县| 清丰县| 晴隆县| 天祝| 伊宁县| 平果县| 开远市| 黄大仙区| 长垣县| 元阳县| 上蔡县| 清镇市| 民勤县| 马尔康县| 开江县| 湄潭县| 孝感市| 德清县| 南安市| 平顺县| 勐海县| 田林县| 宜兴市| 绥德县|