zoukankan      html  css  js  c++  java
  • 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(</span>"/"<span style="color: #000000">)</br>
@ResponseBody</br>
String home(HttpServletRequest req) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> JsonProcessingException, UnsupportedEncodingException {</br>
    logger.info(</span>"测试通过!!!"<span style="color: #000000">);</br>
    ObjectMapper objectMapper </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> ObjectMapper();</br>
    </span><span style="color: #008000">//</span><span style="color: #008000">测试加载yml文件</span></br>
    System.out.println("simpleProp: " +<span style="color: #000000"> config.getSimpleProp());</br>
    System.out.println(</span>"arrayProps: " +<span style="color: #000000"> objectMapper.writeValueAsString(config.getArrayProps()));</br>
    System.out.println(</span>"listProp1: " +<span style="color: #000000"> objectMapper.writeValueAsString(config.getListProp1()));</br>
    System.out.println(</span>"listProp2: " +<span style="color: #000000"> objectMapper.writeValueAsString(config.getListProp2()));</br>
    System.out.println(</span>"mapProps: " +<span style="color: #000000"> objectMapper.writeValueAsString(config.getMapProps()));</br></br>

    </span><span style="color: #008000">//</span><span style="color: #008000">测试加载properties文件</span></br>
    System.out.println(env.getProperty("name"));<span style="color: #008000">//</span><span style="color: #008000">孙凯</span></br>
    System.out.println(env.getProperty("abc"));<span style="color: #008000">//</span><span style="color: #008000">null</span></br>
    System.out.println(name);<span style="color: #008000">//</span><span style="color: #008000">26</span></br>

    <span style="color: #0000ff">return</span> "Hello World!"<span style="color: #000000">;</br>
}</span></pre>
复制代码
查看全文
  • 相关阅读:
    centos编辑文件显示行号
    16.1
    [整理]正睿划水记
    [题解]UVA1519 Dictionary Size
    [题解]CF323C Two permutations
    [题解]CF1527D MEX Tree
    P2216 [HAOI2007]理想的正方形
    CF858D Polycarp's phone book
    ABC214F substrings
    每天一点小知识-20210810
  • 原文地址:https://www.cnblogs.com/jpfss/p/8341761.html
  • Copyright © 2011-2022 走看看