zoukankan      html  css  js  c++  java
  • SpringBoot学习:读取yml和properties文件的内容

    一、在SpringBoot实现属性注入:

      1)、添加pom依赖jar包;

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

      2)、在yml配置文件中:

     1 #pojo属性注入
     2 Mybar: #pojo中的prefix值
     3   name: 张三
     4   arrs: 赵,钱,孙,李
     5   nameList:
     6     - name: 刘
     7       value: 刘备
     8     - name: 张
     9       value: 张飞
    10   BarNameList:
    11   - 早退次数
    12   - 迟到次数
    13   - 旷工天数
    14   map:
    15     key1: 曹操
    16     key2: 曹丕
    17     key3: 曹植

      3)、pojo通过set、get方法获取呀,yml中的值

     1 package cn.com.venus.oa.pojo;
     2 
     3 import java.util.List;
     4 import java.util.Map;
     5 
     6 import org.springframework.beans.factory.annotation.Autowired;
     7 import org.springframework.beans.factory.annotation.Value;
     8 import org.springframework.boot.context.properties.ConfigurationProperties;
     9 import org.springframework.stereotype.Component;
    10 
    11 /**
    12  * 加载yaml配置文件的方法
    13  * spring-boot更新到1.5.2版本后locations属性无法使用
    14  * @PropertySource注解只可以加载proprties文件,无法加载yaml文件
    15  * 故现在把数据放到application.yml文件中,spring-boot启动时会加载
    16  */
    17 @Component
    18 @ConfigurationProperties(prefix="Mybar")
    19 public class Bar {
    20     private String name;
    21 
    22     private String[] arrs;
    23 
    24     private List<Map<String,String>> nameList;
    25     
    26     private List<String> BarNameList;
    27 
    28     private Map<String,String> map;
    29 
    30     public String getName() {
    31         return name;
    32     }
    33 
    34     //String类型的一定需要setter来接收属性值;maps, collections, 和 arrays 不需要
    35     public void setName(String name) {
    36         this.name = name;
    37     }
    38 
    39     public String[] getArrs() {
    40         return arrs;
    41     }
    42 
    43     public void setArrs(String[] arrs) {
    44         this.arrs = arrs;
    45     }
    46 
    47     public Map<String, String> getMap() {
    48         return map;
    49     }
    50 
    51     public void setMap(Map<String, String> map) {
    52         this.map = map;
    53     }
    54 
    55     public List<Map<String, String>> getNameList() {
    56         return nameList;
    57     }
    58 
    59     public void setNameList(List<Map<String, String>> nameList) {
    60         this.nameList = nameList;
    61     }
    62 
    63     public List<String> getBarNameList() {
    64         return BarNameList;
    65     }
    66 
    67     public void setBarNameList(List<String> barNameList) {
    68         BarNameList = barNameList;
    69     }
    70 
    71     
    72 }

      4)、最终在Controller中执行自动注入就可以完成yml配置属性值:

    1 @Autowired
    2 private  Bar bar;

    二、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注解

     1 @Autowired  
     2     private Environment env;  
     3     @Value("${age}")  
     4     String name;  
     5   
     6   
     7     @RequestMapping("/")  
     8     @ResponseBody  
     9     String home(HttpServletRequest req) throws JsonProcessingException, UnsupportedEncodingException {  
    10         logger.info("测试通过!!!");  
    11         ObjectMapper objectMapper = new ObjectMapper();  
    12         //测试加载yml文件  
    13         System.out.println("simpleProp: " + config.getSimpleProp());  
    14         System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));  
    15         System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));  
    16         System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));  
    17         System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));  
    18   
    19         //测试加载properties文件  
    20         System.out.println(env.getProperty("name"));//孙凯  
    21         System.out.println(env.getProperty("abc"));//null  
    22         System.out.println(name);//26  
    23   
    24         return "Hello World!";  
    25     }  
  • 相关阅读:
    Leetcode Binary Tree Preorder Traversal
    Leetcode Minimum Depth of Binary Tree
    Leetcode 148. Sort List
    Leetcode 61. Rotate List
    Leetcode 86. Partition List
    Leetcode 21. Merge Two Sorted Lists
    Leetcode 143. Reorder List
    J2EE项目应用开发过程中的易错点
    JNDI初认识
    奔腾的代码
  • 原文地址:https://www.cnblogs.com/tongxuping/p/7207814.html
Copyright © 2011-2022 走看看