美文网首页SSM+shiro等ssh+Spring(Boot/MVC)Spring Boot
第三篇: spring-boot中的读取配置文件

第三篇: spring-boot中的读取配置文件

作者: LOC_Thomas | 来源:发表于2017-03-21 13:45 被阅读5435次

    前言

    任何一个项目不可能少得了配置文件, 所以配置文件在spring-boot中有很多呈现方式,本篇主要介绍一下最常用的配置文件的方式,代码依附于第一篇开发的简单Hello World的微服务,并且项目代码也是和第一篇的代码在同一个项目之中。

    常规配置

    1. 最常用的 key-value 形式的配置就是通过 @Value 注解

    假设配置文件 application.yaml里面的内容为

    key1: value1
    key2: ${value2:default_value2}
    

    然后代码中使用了

      @Value("${key1}")
      private String key1;
    
      @Value("${key2}")
      private String key2;
    
      @Value("${key3:default_value3}")
      private String key3;
    

    对于配置文件里面的key1表示,对应的值是value1, 如果使用@Value("${key1}") 的时候没有找到对应的值程序就会抛出异常退出。

    对于配置文件里面的key2表示,对应的值是default_value2, 但是可以支持通过手动设置java启动参数-Dvalue2来设置value2来改变默认值。

    对于 @Value("${key3:default_value3}") 表示试图去找配置文件中的 key3, 如果找到了就用配置文件中的值,没有找到的话,不会抛出异常,而是用 default_value3 替代。

    1. 把配置文件转成对象
      首先在配置类上面使用注解
    @Configuration
    @EnableConfigurationProperties({
        CollectionConfig.class, QiNiuConfig.class
    })
    

    其中注解 @Configuration 表示这个类为配置类,需要读配置文件,@EnableConfigurationProperties 表示需要可以把配置文件映射成 CollectionConfigQiNiuConfig 类的对象,是符合java的面向对象的思想的。

    (1) 对象类型: 下面是QiNiuConfig

    @Validated
    @ConfigurationProperties(prefix = "qiniuParam")
    public class QiNiuConfig {
      @NotNull
      private String accessKey;
      @NotNull
      private String secretKey;
      private String localImageFilePath;
      private int otherParam1;
      @NotNull
      private int otherParam2;
    //  @NotNull
      private Integer otherParam3;
    }
    

    对应的配置文件

    qiniuParam:
      accessKey: testAccessKey
      secretKey: testSecretKey
      localImageFilePath: /data/localUpdateFile/
      otherParam1: 11111
    

    在spring-boot的1.5.x版本里面,加入了对于配置对象的字段进行了验证的功能,我们在类上面加上@Validated 注解, 然后在字段上面增加@NotNull 表示该字段不能为空,也可以增加其他注解, 进行各种参数规则的校验,然后@ConfigurationProperties 注解表示前缀统一,可以看到我们配置文件中的对象都是属于 qiniuParam 域之下的,所以我们加了prefix=qiniuParam,另外还有一点要注意,@NotNull 注解,在java的原生类型的时候是不会生效的,可以看到配置文件中 otherParam2 并没有赋值,但是启动不会出错,他会默认把原生类型 int 赋值成0, 如果把 int 改成了 Integer,启动就会出错。

    (2) 集合类型
    配置文件

    list:
      - list_value1
      - list_value2
      - list_value3
    
    map:
      map_key1: map_value1
      map_key2: map_value2
    

    集合类型不能用@Value进行注入,必须要通过类对象进行构造

    @Validated
    @ConfigurationProperties
    public class CollectionConfig {
      @NotNull
      private List<String> list;
      @NotNull
      private Map<String, String> map;
    }
    

    同样可以增加参数验证注解来配合进行验证。并且注意,配置文件只支持list类型和map类型的配置参数。

    (3) 其他
    如果一定要利用@Value来接受list参数,可以通过利用 @Value注解的表达式函数进行解析

    @Value("#{'${list}'.split(',')}")
    private List<String> list;
    
    @Value("#{${map}}")  
    private Map<String,String> map;
    

    然后配置文件中写成

    list: topic1,topic2,topic3
    map: "{key1: 'value1', key2: 'value2'}"
    

    ps: 注意上面的map解析中,一定要用""把map所对应的value包起来,要不然解析会失败,导致不能转成 Map<String,String> map; 对象。

    相关代码在

    https://github.com/dragontree101/spring-boot-tutorials

    相关文章

      网友评论

        本文标题:第三篇: spring-boot中的读取配置文件

        本文链接:https://www.haomeiwen.com/subject/idtgnttx.html