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

@ConfigurationProperties加載外部配置方式

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

@ConfigurationProperties加載外部配置

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

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

在這里插入圖片描述

這里我寫了一個(gè)外部配置文件(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)化特點(diǎn),即可以生成一個(gè)相應(yīng)的對(duì)象。

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

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

真實(shí)的代碼是這個(gè)樣子:

在這里插入圖片描述

@Configuration   //配置類注解,被自動(dòng)掃描發(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嚴(yán)格一致,否則出異常,即使松弛綁定,也要這樣
    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()
}

下面測(cè)試一下:

@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請(qǐng)求,將會(huì)在日志中看到:

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

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

@ConfigurationProperties與@EnableConfigurationProperties

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

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

@EnableConfigurationProperties 文檔中解釋:

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

@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();
    }
}

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

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

一切正常,但是 HelloServiceAutoConfiguration 頭部不使用 @EnableConfigurationProperties,測(cè)訪問報(bào)錯(cuò)。

不使用 @EnableConfigurationProperties 進(jìn)行注冊(cè),使用 @Component 注冊(cè)

@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 測(cè)啟動(dòng)報(bào)錯(cuò)。

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

總結(jié)

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

相關(guān)文章

  • Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式

    Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式

    這篇文章主要介紹了Shiro中session超時(shí)頁(yè)面跳轉(zhuǎn)的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboottest測(cè)試依賴和使用方式

    springboottest測(cè)試依賴和使用方式

    這篇文章主要介紹了springboottest測(cè)試依賴和使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 一文詳解Spring?中的順序問題

    一文詳解Spring?中的順序問題

    本文主要介紹了Spring?中的順序問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java中關(guān)于ThreadLocal的隱式引用詳解

    Java中關(guān)于ThreadLocal的隱式引用詳解

    這篇文章主要介紹了Java中關(guān)于ThreadLocal的隱式引用,從線程的角度看,每個(gè)線程都保持一個(gè)對(duì)其線程局部變量副本的隱式引用,只要線程是活動(dòng)的,ThreadLocal實(shí)例就是可訪問的,下面我們來(lái)具體看看
    2024-03-03
  • SpringBoot如何實(shí)現(xiàn)Tomcat自動(dòng)配置

    SpringBoot如何實(shí)現(xiàn)Tomcat自動(dòng)配置

    這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)Tomcat自動(dòng)配置,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-03-03
  • Javaweb中使用Jdom解析xml的方法

    Javaweb中使用Jdom解析xml的方法

    Jdom是一個(gè)開源項(xiàng)目,基于樹形結(jié)構(gòu),利用純java的技術(shù)對(duì)XML文檔實(shí)現(xiàn)解析,生成,序列化以及多種操作.這篇文章主要介紹了Javaweb中使用Jdom解析xml的方法的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 最新評(píng)論