SpringBoot學習:獲取yml和properties配置文件的內容


項目下載地址:http://download.csdn.net/detail/aqsunkai/9805821

(一)yml配置文件:

pom.xml加入依賴:

<!-- 支持 @ConfigurationProperties 注解 -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <version>${spring-boot.version}</version>
</dependency>

在application.yml文件中加上:

#自定義的屬性和值
myYml:
  simpleProp: simplePropValue
  arrayProps: 1,2,3,4,5
  listProp1:
    - name: abc
      value: abcValue
    - name: efg
      value: efgValue
  listProp2:
    - config2Value1
    - config2Vavlue2
  mapProps:
    key1: value1
    key2: value2

使用一個java類獲取yml文件的內容:

package com.sun.configuration;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 加載yaml配置文件的方法
 * Created by sun on 2017-1-15.
 * spring-boot更新到1.5.2版本后locations屬性無法使用
 * @PropertySource注解只可以加載proprties文件,無法加載yaml文件
 * 故現在把數據放到application.yml文件中,spring-boot啟動時會加載
 */
@Component
//@ConfigurationProperties(locations = {"classpath:config/myProps.yml"},prefix = "myProps")
@ConfigurationProperties(prefix = "myYml")
public class YmlConfig {

    String simpleProp;
    private String[] arrayProps;
    private List<Map<String, String>> listProp1 = new ArrayList<>(); //接收prop1里面的屬性值
    private List<String> listProp2 = new ArrayList<>(); //接收prop2里面的屬性值
    private Map<String, String> mapProps = new HashMap<>(); //接收prop1里面的屬性值

    public String getSimpleProp() {
        return simpleProp;
    }

    //String類型的一定需要setter來接收屬性值;maps, collections, 和 arrays 不需要
    public void setSimpleProp(String simpleProp) {
        this.simpleProp = simpleProp;
    }

    public String[] getArrayProps() {
        return arrayProps;
    }

    public void setArrayProps(String[] arrayProps) {
        this.arrayProps = arrayProps;
    }

    public List<Map<String, String>> getListProp1() {
        return listProp1;
    }

    public void setListProp1(List<Map<String, String>> listProp1) {
        this.listProp1 = listProp1;
    }

    public List<String> getListProp2() {
        return listProp2;
    }

    public void setListProp2(List<String> listProp2) {
        this.listProp2 = listProp2;
    }

    public Map<String, String> getMapProps() {
        return mapProps;
    }

    public void setMapProps(Map<String, String> mapProps) {
        this.mapProps = mapProps;
    }
}

通過依賴注入就可以獲取該對象:

@Autowired
private YmlConfig config;

方法內獲取值:

ObjectMapper objectMapper = new ObjectMapper();
//測試加載yml文件
System.out.println("simpleProp: " + config.getSimpleProp());
System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));
System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));
System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));
System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));

(二)properties配置文件:

使用@PropertySource注解加載配置文件,該注解無法加載yml配置文件。使用@Value注解獲得文件中的參數值

package com.sun.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

/**
 * 加載properties配置文件,在方法中可以獲取
 * abc.properties文件不存在,驗證ignoreResourceNotFound屬性
 * 加上encoding = "utf-8"屬性防止中文亂碼,不能為大寫的"UTF-8"
 * Created by sun on 2017-3-30.
 */
@Configuration
@PropertySource(value = {"classpath:/config/propConfigs.properties","classpath:/config/abc.properties"},
        ignoreResourceNotFound = true,encoding = "utf-8")
public class PropConfig {

    // PropertySourcesPlaceholderConfigurer這個bean,
    // 這個bean主要用於解決@value中使用的${…}占位符。
    // 假如你不使用${…}占位符的話,可以不使用這個bean。
    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}
獲取properties文件參數值有兩種方法,一種獲得Environment 的對象,第二種就是@Value注解

@Autowired
    private Environment env;
    @Value("${age}")
    String name;


    @RequestMapping("/")
    @ResponseBody
    String home(HttpServletRequest req) throws JsonProcessingException, UnsupportedEncodingException {
        logger.info("測試通過!!!");
        ObjectMapper objectMapper = new ObjectMapper();
        //測試加載yml文件
        System.out.println("simpleProp: " + config.getSimpleProp());
        System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));
        System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));
        System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));
        System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));

        //測試加載properties文件
        System.out.println(env.getProperty("name"));//孫凱
        System.out.println(env.getProperty("abc"));//null
        System.out.println(name);//26

        return "Hello World!";
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM