• 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!";
        }
  • 相关阅读:
    Jstorm执行task报错windows CONFIG SET protected-mode no
    windows搭建redis集群最佳实践
    windows下golang实现Kfaka消息发送及kafka环境搭建
    go报错unimplemented: 64-bit mode not compiled in与mingw 64位安装报错ERROR res已解决
    GoLand配置数据库、远程host以及远程调试
    Go项目中beego的orm使用和gorm的使用
    windows下Go升级及GoLand的安装激活
    记一次解脱
    golang开源项目qor快速搭建网站qor-example运行实践
    使用img2html把图片转为网页
  • 原文地址:https://www.cnblogs.com/aqsunkai/p/6690573.html
Copyright © 2020-2023  润新知