前言
本文接上一篇博客Spring Boot讀取配置文件自定義信息
以上場景適用于比較簡單的屬性文件秉版。然而日月,在實際工作中我們會需要這樣的配置:配置文件的key中也包含有變量信息映屋。如下所示:
tran.subtype.交易子類型.id=xxx
tran.subtype.交易子類型.infoTableName=xxx
tran.subtype.交易子類型.msgTemplate=xxx
tran.subtype.交易子類型.receiverSASMap.字段名=SAS結(jié)果映射值
這里支持配置多種交易子類型,并分別指定id, infoTableName和msgTemplate屬性的值列林。此外贞盯,還有一個map類型的配置:receiverSASMap。該map用于配置SAS規(guī)則引擎返回結(jié)果和數(shù)據(jù)庫表字段的對應關系氯哮。即在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
我們?nèi)绾尉帉懣梢猿休d此類信息的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
總結(jié)
如果在properties文件配置項的key中使用變量的話穴肘,需要在對應的bean內(nèi)定義map歇盼。屬性文件的書寫規(guī)則為:
prefix.mapName.keyN=valueN
前綴.map名稱.keyN=valueN