Spring Cloud 自定义ConfigServer

公司需要将系统配置信息中的敏感信息独立存放。

现有系统采用Spring Cloud Config提供配置信息,其中敏感信息主要是Db配置,分解本次需求:

(1)数据库配置信息分离(主要是Db信息)。

(2)原有Config Server功能继续可用。

(3)对特定环境(这里是仿真环境-Demo、生产环境)可以定制配置信息。

 

思路有如下几种:

(1)Spring Aop 拦截Config Server中配置返回方法,改写方法返回值。

(2)Spring Aop 拦截Config Server中读取配置方法,读取更多文件源。

(3)Filter拦截Config Server中数据返回方法,改写方法返回值。

其中:

方法1与方法3都是对返回结果进行处理,可以兼容Spring Cloud Config的版本升级,因方法1需要绑定到特定方法,而方法3无需考虑具体方法,耦合性更低。

方法2需要改写Config Server的代码,或覆盖Config Server的Bean,较1和2复杂,且无法随这主版本升级,直接pass。

 

综合考虑采用方法3,以下是处理与代码:

公司统一标准,将Db配置信息存储到Json文件中,因此需要一个解析Json文件的Service:

import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.MapPropertySource; import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @Component public class JsonSourcePropertiesLoader { @Value("${Config.Json.FileLocation}") String FileLocation; public MapPropertySource load() throws IOException { File jsonFile = new File(FileLocation); final Map<String, Object> source = process(jsonFile); System.out.println(new Date().getTime()); return new MapPropertySource("dbConfigMap",source); } private Map<String, Object> process(final File resourceFile){ Map<String, Object> map = null; try{ map = new ObjectMapper().readValue(resourceFile, LinkedHashMap.class); }catch (IOException e){ e.printStackTrace(); } return map; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspgfj.html