springboot 學習之路 22 (讀取自定義文件)

springboot讀取自定義的properties文件:

    

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

     * */
}

springboot 讀取自定義的yml文件:

  因爲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

相關文章
相關標籤/搜索