package com.huhy.demo.properties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * @author : huhy on 2018/9/28. * @Project_name:springboot_self_gitlab * @LOCAL:com.huhy.demo.properties * @description: * 注意: * 1》spring-boot更新到1.5.2版本後locations屬性沒法使用 * @PropertySource註解只能夠加載proprties文件,沒法加載yaml文件 * 2》 若是有多個配置文件須要注入,能夠用value[]來接收 @PropertySource(value={"classpath:yang.properties","classpath:yang2.properties"}) 3》文件讀取 默認是resource下文件 @PropertySource("classpath:config/remote.properties") 配置config文件路徑 4》加上encoding = "utf-8"屬性防止中文亂碼,也能夠大寫的"UTF-8" 5》ignoreResourceNotFound = true 掃描文件不存在的處理方式 默認false */ @ConfigurationProperties(prefix="huhy") @PropertySource(value = {"classpath:yang.properties","classpath:yang2.properties"},encoding = "UTF-8",ignoreResourceNotFound = true) @Data @Component public class PropertiesYang { private String name; private String age; /** * * name的值咱們設置的是"classpath:yang.properties","classpath:yang2.properties"。這個值在Springboot的環境中必須是惟一的,若是不設置, * 則值爲:「class path resource ["classpath:yang.properties","classpath:yang2.properties"]「。 * 可能不少人比較納悶,爲何是「class path resource ["classpath:yang.properties","classpath:yang2.properties"]「呢? * 這個就涉及到了Spring中對資源文件的封裝類Resource。上文咱們配置的value值爲""classpath:yang.properties","classpath:yang2.properties"", * 所以Spring發現是classpath開頭的,所以最終使用的是Resource的子類ClassPathResource。若是是file開頭的,則最終使用的類是FileSystemResource。 * 瞭解了上文所述的Resource類以後。咱們再次明確一點,若是@PropertySource中若是沒有設置name值,則name值的生成規則是:根據value值查找到最終封裝的Resource子類, * 而後調用具體的Resource子類實例對象中的getDescription方法,getDescription方法的返回值爲最終的name值。 * 好比ClassPathResource類中的getDescription方法實現以下: * public String getDescription() { * StringBuilder builder = new StringBuilder("class path resource ["); * String pathToUse = path; * if (this.clazz != null && !pathToUse.startsWith("/")) { * builder.append(ClassUtils.classPackageAsResourcePath(this.clazz)); * builder.append('/'); * } * if (pathToUse.startsWith("/")) { * pathToUse = pathToUse.substring(1); * } * builder.append(pathToUse); * builder.append(']'); * return builder.toString();} * */ }
因爲springboot1.5.2以後中止了localtions的指定。如今加載yml文件的實現方式以下:html
YmlConfig 配置類:git
/** * @author : huhy on 2018/9/28. * @Project_name:springboot_self_gitlab * @LOCAL:com.huhy.demo.properties * @description:{todo} */ @Component public class YmlConfig { @Bean public static PropertySourcesPlaceholderConfigurer properties() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean(); //yaml.setResources(new FileSystemResource("yang.yml"));//File引入 yaml.setResources(new ClassPathResource("yang.yml"));//class引入 configurer.setProperties(yaml.getObject()); return configurer; } }
實體類:spring
/** * @author : huhy on 2018/9/28. * @Project_name:springboot_self_gitlab * @LOCAL:com.huhy.demo.properties * @description:自定義加載yml文件 * 1> ConfigurationProperties註解的locations屬性在1.5.X之後沒有了,不能指定locations來加載yml文件 * PropertySource註解只支持properties文件加載,詳細見官方文檔: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-yaml-shortcomings * 2> */ @Data @Component @ConfigurationProperties(prefix = "yang") public class YmlYang{ private String name; private String age; }
配置文件「springboot
yang: name: yml age: 18
就這樣就好了,你們能夠試一下app