91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

@ConfigurationProperties加載外部如何配置

發布時間:2023-03-13 10:36:36 來源:億速云 閱讀:130 作者:iii 欄目:開發技術

這篇文章主要介紹了@ConfigurationProperties加載外部如何配置的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇@ConfigurationProperties加載外部如何配置文章都會有所收獲,下面我們一起來看看吧。

@ConfigurationProperties加載外部配置

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

整個項目結構是這樣的:

@ConfigurationProperties加載外部如何配置

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

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

可以看見配置文件的數據有結構化特點,即可以生成一個相應的對象。

應該是這個樣子:

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

真實的代碼是這個樣子:

@ConfigurationProperties加載外部如何配置

@Configuration   //配置類注解,被自動掃描發現
@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";
    }
}

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

@ConfigurationProperties加載外部如何配置

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

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

@ConfigurationProperties與@EnableConfigurationProperties

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

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

@EnableConfigurationProperties 文檔中解釋:

當@EnableConfigurationProperties注解應用到你的@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();
    }
}

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

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 中。

關于“@ConfigurationProperties加載外部如何配置”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“@ConfigurationProperties加載外部如何配置”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼木县| 金湖县| 施甸县| 易门县| 炉霍县| 温泉县| 佛坪县| 阳新县| 北京市| 江源县| 甘洛县| 吉林省| 全州县| 汉沽区| 旬阳县| 旌德县| 莱州市| 高邮市| 罗源县| 定日县| 灵寿县| 华蓥市| 兴隆县| 西林县| 南皮县| 定远县| 霍邱县| 新宾| 台南县| 肃南| 镇远县| 台中县| 文昌市| 宁陵县| 枣阳市| 北海市| 江源县| 哈密市| 新安县| 连云港市| 牡丹江市|