我的架构之路 — 配置中心(二)— 在已有项目中实际应用

要把配置中心整合进现有的项目,要做的事情还不少

接管spring mvc属性文件

现在的java应用一般都是spring框架的,spring属性文件配置占了绝大多数比例,所以配置中心的,首要任务就是把spring配置文件集中到配置中心来管理。其实spring cloud本身也有一套配置管理,它是通过git或svn进行配置的,在版本控制上比较方便,但在界面使用上就比太方便了。

spring mvc属性文件是通过PropertyPlaceholderConfigurer来管理的,所以要接管spring mvc属性文件,就可以实现自定义的PropertyPlaceholderConfigurer,并实现从配置中心的读取配置。

接管spring boot的application.properties 属性文件

Spring Boot 所提供的配置优先级顺序比较复杂。按照优先级从高到低的顺序,具体的列表如下所示。

  1. 命令行参数。
  2. 通过 System.getProperties() 获取的 Java 系统参数。
  3. 操作系统环境变量。
  4. 从 java:comp/env 得到的 JNDI 属性。
  5. 通过 RandomValuePropertySource 生成的“random.*”属性。
  6. 应用 Jar 文件之外的属性文件。(通过spring.config.location参数)
  7. 应用 Jar 文件内部的属性文件。
  8. 在应用配置 Java 类(包含“@Configuration”注解的 Java 类)中 通过“@PropertySource”注解声明的属性文件。
  9. 通过“SpringApplication.setDefaultProperties”声明的默认属性。

所以要方便把配置中心的配置注入,比较好的是2和9,但2会设置太多的System属性感觉不太好,所以最终使用SpringApplication.setDefaultProperties方法把配置塞进去。但这种方式也有个弊端,它优先级是最低的,application.properties的配置如果不去掉的话,会把配置中心的配置覆盖的。

接管其他工具类配置信息的读取

有些配置信息是通过自定义的工具类从自定义的配置文件中读取的,这些工具类都需要进行改造,改为从配置中心读取。

Freemarker 模板直接引用了maven profile(mvn)的属性

maven profile的属性都是编译时打进去的,跟上面提到的动态加载的不一样,不幸的是,现有的项目代码中有些 Freemarker 模板图方便,用到了maven的profile属性,这种情况怎么办?其实还是借助spring来进行动态配置。

1)先保证在spring mvc 配置中引用我配置中心自定义的propertyConfigurer 属性获取类

<bean id="propertyConfigurer" class="com.cehome.utils.config.PropertyPlaceholderConfigurer">

</bean>

2)然后在freemarkerConfig 中增加freemarkerVariables属性,在里面配置多个变量,通过这种方式,把原来模版中静态编译的变量(如${baseUrl})换成由spring属性读取。

<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
          <property name="freemarkerVariables">
        <map>
            <entry key="baseUrl" value="${baseUrl}"></entry>
        </map>
    </property>
</bean>

Js文件中包含了mvn配置项

Js 比较麻烦,原则上也是要去掉mvn属性项。一种方法是把js中的mvn的变量移出到模板页面中,在模板页面中加入变量定义,如:
原来util.js中包含mvn项:

var baseUrl ="${mvn.scheduler.baseUrl}";```  

改为:

##Logback 日志环境变量修改(如日志级别)。

通过在logback.xml我们会定义一些占位符参数,如${logback.root.level},也是通过mvn编译时候打进去的,这种也需要人为做些处理,取到配置中心的属性后,通过调用System.setProperty("logback.root.level","INFO") 进行动态注入,logback它是能够识别系统属性的。

## 配置合并

在实际改造当中发现,不同应用其实是由一些公共配置的,例如数据库配置、redis配置,如果每个应用都配置一遍感觉重复太多了。所以增加了公共配置信息,并有一个约定,缺省的情况下应用启动是时候先加载公共配置信息,然后再是应用本身的配置,应用本身的配置可以覆盖公共配置同名的配置项。

时间: 2024-10-24 13:34:15

我的架构之路 — 配置中心(二)— 在已有项目中实际应用的相关文章

我的架构之路 — 配置中心(三)— 动态更新配置

包含两方面的含义:一.变化的配置能够下发到客户端.二.客户端能够方便地处理这些变化的配置.下面会讲普通监听器回调方式和spring 注解到field的方式. 配置下发 1)客户端间隔20秒(可配)去数据库拉取配置,sql传递的参数有配置名称.环境.上一次最大更新时间2)取到配置后,合并更新本地备份.3)通过监听器的方式通知配置变化. #监听器接口 public interface ConfigUpdateListener { void update(Properties properties);

我的架构之路 — 配置中心(一)—简单实用的配置中心

离开淘宝,我没有去处于风口的摩拜,而是加入了铁甲网,可能也是一种中庸之道吧.不过铁甲竟然也搬家到了亮马桥河畔,不远处就是摩拜.到铁甲第一个项目就是搭建一个配置中心,实现配置的统一管理,实现配置的动态更新,初步要求就是尽快出来,简单.稳定. 淘宝有diamond,但没有开源(内部绑定太多,很早之前有个开源版本),否决了:百度有disconf,但需要mysql.redis.zookeper.nginx 一堆东西,好吧,经过讨论,咱是要一个简单好用的配置管理,那就pass掉吧. 于是又到GitHub找

买单侠数据库架构之路

摘要:在2017杭州云栖大会阿里云HTAP技术专场上,上海秦苍信息科技有限公司DBA负责人赵怀刚为大家分享了HTPA型数据库产品在现实中的落地应用以及企业级数据库架构设计中的HTPA的应用. 本文内容根据嘉宾演讲视频以及PPT整理而成. 本次分享的主题是买单侠数据库架构之路.秦苍科技是一家互联网消费金融公司,我们所有的产品基本都是托管在阿里云上的,在自己的系统中大概应用了20多种阿里云数据库产品.基于阿里云平台,秦苍科技的数据库架构与传统RDS数据运维相比存在着本质的区别.接下来着重介绍一下在产

云栖大会分享:买单侠的数据库架构之路

互联网金融行业快速发展的浪潮中,面对海量增长的数据,买单侠走出了自己的数据库架构之路. 本文是买单侠DBA负责人赵怀刚在杭州云栖大会上的分享,介绍了数据库运维中遇到的问题.基于阿里云平台数据库架构的演变和案例和云数据库运维的思考.图1 赵怀刚在分享 秦苍科技是一家专注于为年轻人提供消费分期服务互联网消费金融公司,目前有"买单侠"和"星计划"系列产品,"买单侠"面向中国年轻蓝领用户,提供移动端消费分期服务."星计划"为年轻女性用

springcloud(九):配置中心和消息总线(配置中心终结版)

我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案就不太适合了.使用Spring Cloud Bus可以完美解决这一问题. Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点.这会用在广播状态的变化(例如配置变化)或者其他的消息指令.Spr

《架构之路Redis系列》Redis哨兵模式的搭建

一.哨兵模式 1.简介 Redis Sentinel是Redis官方提供的集群管理工具,可以部署在其他与redis集群可通讯的机器中监控redis集群. 2.特性 监控:能持续监控Redis的主从实例是否正常工作; 通知:当被监控的Redis实例出问题时,能通过API通知系统管理员或其他程序; 自动故障恢复:如果主实例无法正常工作,Sentinel将启动故障恢复机制把一个从实例提升为主实例,其他的从实例将会被重新配置到新的主实例,且应用程序会得到一个更换新地址的通知. 更多访问官方:https:

一篇好TM长的关于配置中心的文章

配置 (Configuration) 配置(Configuration) 这个概念每个技术人都不陌生,可以说一个不提供几个配置参数的系统都不好意思上线跟别的系统打招呼.那么为什么会是这个样子呢,究其本质是我们人类无法掌控和预知一切,映射到软件领域上,我们总是需要对系统的某些功能特性预留出一些控制的线头,以便我们在未来需要的时候,可以人为的拨弄这些线头从而控制系统的行为特征,我把它叫做 "系统运行时(runtime)飞行姿态的动态调整". 举个简单的例子, logLevel = INFO

高可用的分布式配置中心(Spring Cloud Config)

上一篇内容讲述,一个服务如何从配置中心读取文件,配置中心如何从远程Git读取配置文件,当服务很多时,都需要同时从配置中心读取文件的时候,这时我们可以考虑将配置中心做成一个微服务,并且将其集群化,从而达到高可用,架构图如下: 一.准备工作 继续使用上一篇文章的工程,创建一个eureka-server工程,用作服务中心. 其pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q

从魅族想法的落地 看融合架构如何革新数据中心

打造未来就绪的数据中心,企业需要灵活的基础架构来增强数据中心的灵活性,处理创新和传统工作负载. 以往,作为中型以上规模客户只有有限的几种选择:机架,刀片式或是密集部署.企业缺乏适当的体系结构足以满足业务的需求或不断变化的应用.那有没有既模块化还能按工作负载定制,既能快速部署还能轻松管理所有资源的灵活架构? 不妨看看制造企业魅族的选择. 前进的魅族如何让服务体验也PRO? 魅族科技(中国)有限公司是国内知名智能手机厂商,总部位于广东省珠海市,目前正在向互联网公司转型,采购大量的服务器用于移动互联网