SpringCloud如何提取公共配置
SpringCloud 提取公共配置
在开发微服务项⽬时,通常会有很多服务,此时会⽤配置中⼼来管理这些服务的配置,但有些服务可能会有相同的配置,⽐如数据源配置,eureka server注册中⼼地址配置,actuator开放端⼝配置等,很多的服务都需要,如果每个服务都写⼀份这样相同的配置,服务⼀多,也挺⿇烦的,并且如果要换⼀个数据库或注册中⼼,每个服务都得改,很⿇烦,所以就需要将这些公共的配置提取出来,放到公共的配置⽂件中,⽽这些服务去引⽤这些配置即可。
原本服务的配置⽂件可能是这样的:
spring:
application:
name: eureka-client
cloud:
config:
uri: localhost:8888 #配置中⼼地址
label: master
profile: dev
此时服务默认会去config名字为l的配置⽂件,这个配置⽂件⾥可能有eureka server地址,数据源配置,redis配置等,⽽另⼀个服务的配置⽂件可能也有这些相同的配置,这时就可以将这些相同的配置提取出来,放到多个配置⽂件中,让服务去读取这些配置⽂件,⽐如可能有l来放各个服务公共的配置,l来存放数据源配置,⽽l是这个服务独有的配置,这些配置⽂件都在config server中,则服务的⼯程中的配置⽂件则可以改成这样:
spring:
application:
name: eureka-client
cloud:
springcloud和springbootconfig:
uri: localhost:8888 #配置中⼼地址
label: master
profile: dev
name: eureka-client,base,datasource
这样eureka-client服务就会去配置中⼼读取这3个配置⽂件,其他的服务如果需要,直接在⾃⾝的配置中在
fig.name属性中添加⽂件名即可,⽽不⽤再写相同的配置了。
SpringCloud config 多服务共享公共配置的解决
问题描述
我们公司的项⽬是基于SpringCloud开发的微服务,⽤到了Spring-Cloud-Config作为微服务统⼀的配置中⼼,可以将散落在各个服务的配置进⾏统⼀配置管理。
虽然配置中⼼将各个应⽤的配置⽂件进⾏了统⼀管理,但是涉及到的⼀些公共配置,⽐如数据库连接,r
edis连接,ftp连接等,依然还散落在各个应⽤的配置⽂件中,并没有抽取,我们需要根据环境的不同,⽽动态修改它们,⾮常难以维护。导致每次涉及修改这些公共配置,就⾮常⽼⽕。
所以想到了利⽤公共⽂件⽅法,现在在这⾥简单阐述⼀下如何配置。(下⾯例⼦Spring-Cloud-Config-Server都是使⽤本地配置⽅式)。
经过⽹上查阅资料,⼤部分都是采⽤⽅法⼀进⾏配置的,那么我提供了⼀个⽅式⼆配置,也许会让你眼前⼀亮,然后留下你的想法,如果是你去选择,会选择哪个⽅法呢?
⽅法⼀:
⾸先在配置中⼼的 config/ ⽬录下创建⼀个公共配置⽂件l, 然后在各个应⽤下的 l ⽂件中
fig.name 这⾥去配置多个配置⽂件名。
例如:
service-a 客户端的 l:
spring:
cloud:
config:
name: service-a, common
service-b 客户端的 l:
spring:
cloud:
config:
name: service-b, common
⽅法⼆:(⽐较推荐)
我们还记得springboot单体应⽤的时候,是如何抽离公共配置呢?答案是⽤spring.profiles.include 进⾏引⽤其他公共配置⽂件。⽽且它的⽂件命名有个特点,就是必须是application-开头的配置⽂件。
我们也会去想,像spring-cloud-config这样的配置集中化,这样的配置会⽣效吗?
例如:
⾸先,我们在 config/ ⽬录下创建 l 配置⽂件
然后分别修改 service-a 和 service-b 在 config/ ⽬录下的配置⽂件,配置如下:
service-a 客户端的 l
spring:
application:
name: service-a
#公共配置⽂件
profiles:
include: common-dev
service-b 客户端的 l
spring:
application:
name: service-b
#公共配置⽂件
profiles:
include: common-dev
分别启动各⾃的服务,就可以看到服务启动成功。
那么,这两种⽅式那种更好⼀些呢?
⽅法⼀:
缺点:如果有新加的公共配置⽂件,需要去每个服务的l都去修改⼀下。并且需要重新发布jar包。
⽅法⼆:
优点:配置可以外部化,⽽且修改配置⽂件,不需要单独发布jar包。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论