SpringBoot 复杂配置信息读取

前言

本文接上一篇博客Spring Boot读取配置文件自定义信息

以上场景适用于比较简单的属性文件。然而,在实际工作中我们会需要这样的配置:配置文件的key中也包含有变量信息。如下所示:

tran.subtype.交易子类型.id=xxx
tran.subtype.交易子类型.infoTableName=xxx
tran.subtype.交易子类型.msgTemplate=xxx
tran.subtype.交易子类型.receiverSASMap.字段名=SAS结果映射值

这里支持配置多种交易子类型,并分别指定id, infoTableName和msgTemplate属性的值。此外,还有一个map类型的配置:receiverSASMap。该map用于配置SAS规则引擎返回结果和数据库表字段的对应关系。即在properties文件的key中存在两个变量:上图中的交易子类型字段名

实际的属性文件如下所示:

tran.subtype.toUser.id=0001
tran.subtype.toUser.infoTableName=Table1
tran.subtype.toUser.receiverSASMap.RETAILER_INFO=1,2
tran.subtype.toUser.receiverSASMap.BRANCH_INFO=2
tran.subtype.toUser.msgTemplate=ABCtoUser

tran.subtype.toPublic.id=0002
tran.subtype.toPublic.infoTableName=Table2
tran.subtype.toPublic.receiverSASMap.RETAILER_INFO=3,4
tran.subtype.toPublic.receiverSASMap.BRANCH_INFO=5
tran.subtype.toPublic.msgTemplate=DEFtoPublic

我们如何编写可以承载此类信息的bean呢?

Bean的编写

@Component
@ConfigurationProperties(prefix = "tran")
public class TranConfigBean {
    public static class Type {
        private String id;
        private String infoTableName;
        private String msgTemplate;
        private Map<String, String> receiverSASMap;

        // Setters and getters ...
    }

    private Map<String, Type> subtype;

    // Setters and getters.
}

这里需要解释下@ConfigurationProperties修饰的bean中map类型成员变量如何灵活运用。

复杂属性匹配不容易理解的地方在于Map的变量名,key和value是怎么对应到properties上的。对于value类型为简单类型的map而言:

Map<String, String> demoMap;

对应的属性文件为:

# key1和key2会被映射为demoMap的key值
prefix.demoMap.key1=value1
prefix.demoMap.key2=value2

其中prefix@ConfigurationProperties中prefix的值。

如果Map中value的类型为复杂类型(bean, list或map):

Map<String, Student> demoMap;
// ...

public static class Student {
    private Integer id;
    private String name;
    // setters and getters
}

对应的属性文件为:

# key1和key2会被映射为demoMap的key值
prefix.demoMap.key1.id=001
prefix.demoMap.key1.name=paul
prefix.demoMap.key2.id=002
prefix.demoMap.key2.name=peter

总结

如果在properties文件配置项的key中使用变量的话,需要在对应的bean内定义map。属性文件的书写规则为:

prefix.mapName.keyN=valueN
前缀.map名称.keyN=valueN

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,200评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 6,779评论 2 22
  • 每日七言 人们都说喝酒要喝六分醉,吃饭要吃七分饱,爱人要用八分情,可我总是喝醉吃撑爱成傻子。 在这个社会,活着活着...
    Garvey阿伟阅读 371评论 0 1