微服务应用和普通WEB应用配置文件区分处理的一种方式
由于微服务的逐步应用,目前可能会存在微服务版和普通WEB版的2种应用形式同时存在,微服务配置一般用yml格式文件,普通WEB服务一般用XML 和properties 格式文件。那么如何在代码中切换或兼容这2种不同的参数配置方式呢?
这里给出一个处理办法。基本思路:
1、微服务的配置文件使用配置对象,因为在微服务中可使用@ConfigurationProperties注解功能直接将yml配置文件中的信息转换为配置对象,非常方便。同时,在配置类(添加@Configuration注解)中对配置信息进行读取,例如:
@Bean @ConfigurationProperties(prefix = "properties.prefix") ClientConfigInfo clientConfigInfo(){ ClientConfigInfo clientConfigInfo = new ClientConfigInfo(); return clientConfigInfo; } |
2、普通WEB应用的属性文件一般会封装为一个全局性的属性对象如Platform,这种做法一般直接是直接在代码中使用Platform.getPropertie("key")静态方法来获取参数信息。
public static void init() throws AAConfigException { if (appId == null) { //... } |
3、自动切换。在使用配置信息进行初始化时(假设初始化类叫XXX,具有init()和init(ClientConfigInfo)2种初始化化方法),代码中使用配置信息对象(见下面的示例),进行判断。在代码中声明clientConfigInfo自动织入,如果使用微服务模式,则clientConfigInfo对象会被初始化,故调用init(clientConfigInfo)方法;如果使用普通WEB模式,则clientConfigInfo对象没有被实例化,所以clientConfigInfo为空,故调用init()方法。
这里@Autowired参数require=false是关键,若不加上它,普通WEB模式下时会找不到ClientConfigInfo的实例而启动失败。
@Autowired(required=false) ClientConfigInfo clientConfigInfo;
if(clientConfigInfo == null){ |