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     }  
    

      

    test read ymlfile

    fruit: 
    name: apple 
    amount: 5

    自定义的属性和值

    myProps: 
    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

    server: 
    port: 8080 
    address: localhost 
    context-path: /springboot-jpa

    1.@value注解

    这里写图片描述
    这里写图片描述

    2.javaBean:

    这里写图片描述这里写图片描述
    这里写图片描述

  • 相关阅读:
    鸿蒙轻内核M核源码分析:数据结构之任务就绪队列
    Elasticsearch数据库优化实战:让你的ES飞起来
    还不会使用分布式锁?教你三种分布式锁实现的方式
    云小课 | 大数据融合分析:GaussDW(DWS)轻松导入MRS-Hive数据源
    JavaScript 空间坐标
    HttpWatch网络抓包工具的使用
    安卓Fragment和Activity之间的数据通讯
    Android MVP模式
    Android从服务端获取json解析显示在客户端上面
    JavaWeb网上商城的反思
  • 原文地址:https://www.cnblogs.com/jtlgb/p/8494452.html
Copyright © 2011-2022 走看看