非spring boot 使用Spring cloud Config (老版 spring 集成 spring cloud config ) || spring cloud config 搭建
个人博客:https://eric-ly.github.io/
背景:想自己搭建一个分布式的配置中心,发现spring Cloud Config 不错,(后台基于git,可以配置webhook 实现热更新、回滚,分环境配置等)与自己的期望相近。
虽然好用但是基于spring boot的,spring 与spring boot 还是有挺多巨别。为了能用在现有的 项目中,决定 想办法集成一下,百度 google 都没有现成的可以copy…
于是想自己实现下,查询之后 按照一个大神的想法实现了下。中间遇到许多问题,不过更加了解spring了 也会继续完善。java 新人 希望各位大神多多指导。
github:https://github.com/Eric-ly/hconfig
后面有项目的测试说明:
实现结果:
在spring 中 使用spring Cloud Config 功能,分项目/环境 获取配置文件,自动注入,自动更新 spring boot的注解无法兼容 待稍后解决。
前提:
一个简单的spring spring MVC 项目。
config server 配置好,github 配置好。 这个网上百度就有很多。
(在搭建spring cloud config (server and client)后,搭建注册应用中心 eureka 和 rabbitMq 进行自动热更新。)
实现方式:
1.创建自定义的ApplicationContext,先通过在web.xml中设置 contextClass 来指定应用使用自定义的ApplicationContext,
2.在自定义的applicationContext中 覆写 创建environment的方法,用来定制 environment,把config server的配置信息加入 应用
3.自定义的CloudEnvironment extends StandardServletEnvironment,扩展customizePropertySources方法,指定 配置的来源,然后放入 propertySource的list中,作为整个项目的 配置之一。
4.自定义propertySouce ,使用spring cloud client的ConfigClientProperties 作为 propertySouce的来源, 然后添加到PropertySource中
5.自定义配置类,将配置中心的配置按照单个/model 进行注入
后期实现:
(1)兼容@refresh的注解,使 自动更新。
(2)通过修改name 获取多个配置文件。优化config server的文件
(3)细化 回滚功能
(4)写 拦截器,打成jar包,成为一个工具包,通过自定义注解 来使用。隐藏实现。成为一个通用的功能
最近有点忙,这个项目先达到能基本用,慢慢完善。
具体实现步骤:
1.增加pom 依赖,spring mvc ,spring cloud,logback 等
<properties>
<spring.version>4.2.9.RELEASE</spring.version>
<jstl.version>1.2</jstl.version>
<junit.version>4.11</junit.version>
<logback.version>1.0.13</logback.version>