java开发-springboot项目集成配置中心

本文详细介绍了如何使用Spring Boot搭建微服务配置中心,包括配置中心服务端的搭建、各微服务连接配置中心的方法,以及配置文件的管理和优化,旨在解决微服务环境下配置管理的难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概要

  • 项目采用微服务架构,将原有的单一web项目拆分成若干个微服务;每个微服务里,都有自己的springboot配置;
  • 微服务上线后,开始现场部署,悲剧了开始了。。。实施人员需要将20几个微服务jar包逐个解压,然后修改里面的配置信息,比如:数据库地址,redis地址,RabbitMQ地址等;如果数据库地址等有改动,还是将这20几个jar包,逐一改动;实在是不方便;开发经理强烈要求:必须优化微服务配置管理;
  • 于是,我便开始了优化微服务配置的任务;

2. 教程

springboot是支持配置集中管理的,下面具体介绍一下集成方法。

2.1 搭建配置中心服务端

  • 既然想实现统一管理各个微服务的配置,那么就得有一个集中管理配置的服务。
  • 搭建一个新的springboot项目,然后引入相应的springboot依赖就可以了,比较简单。
  • 我是直接将配置中心集成到Euraka服务里了,因为我们项目的微服务jar目前就已经20几个了,太多了,索性直接将配置中心集成到Euraka里,减少维护成本。

2.1.1 POM.xml依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-config-server</artifactId>
 </dependency>

2.1.2 修改启动类

给启动类添加 @EnableConfigServer 注释,声明该项目作为配置中心服务端:

@EnableConfigServer
@EnableEurekaServer
@SpringBootApplication
public class WsfyCenterApplication {
    public static void main(String[] args) {
        SpringApplication.run(WsfyCenterApplication.class, args);
    }
}

2.1.3 修改配置文件

配置中心服务端的配置文件 application.yml,需要增加如下配置:

server:
  port: 8761
spring:
  profiles: 
    active: native #配置中心-配置文件仓库-本地(除了本地,还有svn,git等配置)
  cloud: 
    config: 
      server: 
        native: 
          search-locations: E:/WsfyConfigResporties #配置中心-配置文件仓库-地址
  • 配置中心需要一个地方来存储各个微服务的配置文件;可以通过spring.profiles.active配置项指定配置仓库的类型;仓库存储类型通常有:本地存储、svn、git等。
  • 通过配置项spring.cloud.config.server.native.search-locations指定本地存储路径。我是将本地的e盘下的WsfyConfigResporties文件夹作为配置中心存储路径。
  • 我们项目采用的本地存储。也就是说将各个微服务的配置文件,存储到配置中心所在的服务器上某个路径下。因为用户现场是没有git和svn的。

2.1.4 提取出各个微服务的配置文件到配置中心

  • 将各个微服务的配置文件application.yml放到配置项spring.cloud.config.server.native.search-locations指定的路径下。

  • 各个微服务的配置文件,在配置中心存储路径下的命名规则,springboot是有要求的。规则如下:
    {微服务名称} - {运行环境的标识}.yml

  • 微服务名称,对应各个微服务的配置文件里的spring.application.name属性;

spring:
  application:
    name: wsfy-api

每个微服务就是通过自己的服务名称,在配置中心读取自己对应的配置文件的。

  • 运行环境的标识,是指微服务指定运行环境的标识。比如某个微服务A,它有多个环境的配置文件:
环境名称对应的配置文件运行环境的标识
开发环境application-dev.ymldev
测试环境application-test.ymltest
生产环境application-prod.ymlprod

配置文件名称里的dev、test、prod就是运行环境的标识。

  • 既然将各个微服务的配置文件提取到了jar包之外,那么各个微服务项目里的配置文件application.yml里就没必要再保留这些冗余的配置了,避免增加维护成本,可以清除了。每个微服务的配置文件里,我只保留了项目名配置项:
    在这里插入图片描述

2.1.5 提取公共配置文件

  • 每个微服务的配置文件里,都有数据库地址、redis地址、RabbitMQ地址等公共配置。为了减少维护成本,我将这些公共配置提取到一个公共配置文件里:wsfy-master-config.yml,文件名称自己随便定义哈。

  • 我的配置中心的存储路径下,各个微服务文件列表示例如下:
    wsfy-master-config.yml
    wsfy-api-dev.yml
    wsfy-api-prod.yml
    wsfy-user-dev.yml
    wsfy-user-prod.yml
    wsfy-cache-dev.yml
    wsfy-cache-prod.yml

  • 至此,配置中心服务端搭建完毕。启动项目,浏览器访问http://{配置ip}:{prot}/配置文件名,可以查看该配置文件:
    在这里插入图片描述

2.2 各个微服务连接配置中心

2.2.1 pom.xml依赖

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

2.2.2 连接配置中心

  • 在每个微服务的src/main/resources路径下新建bootstrap.yml配置文件,在这里配置一些与配置中心有关的信息,从而使微服务可以访问配置中心里的配置文件。
  • 注意:新建的配置文件名,必须为bootstrap.yml。在springboot里,bootstrap.yml的优先级比application.yml高。如果将配置中心的相关配置写到application.yml是不会生效的,只有写在bootstrap.yml里才会生效。读者可以网上搜索application.yml与bootstrap.yml的区别。
  • bootstrap.yml配置如下:
spring: 
  application: 
      name: wsfy-api (3)
  config: 
      location: http://{配置中心IP地址}:{配置中心服务端口}/wsfy-master-config.yml (2)
  cloud: 
    config:
      uri: http://{配置中心IP地址}:{配置中心服务端口} (1)
      profile: prod (4)

(1)spring.cloud.config.uri:对应配置中心服务端地址。告诉当前微服务,去哪里拿配置。
(2)spring.config.location:对应配置中心服务端,公共文件的访问地址。如果在浏览器,这个地址打不开,说明你的配置中心服务端启动有问题,需要排查一下。
(3)spring.application.name:告诉配置中心,哪个文件是我的。别给我读取别的微服务的配置文件。
(4)spring.cloud.config.profile:告诉配置中心,我要读取哪个运行环境的配置文件。

  • 至此微服务客户端访问配置中心完毕。可以启动了。

笔记

1.同一配置,公共文件和jar自己的文件,哪个优先级高?

同一个配置在公共配置文件和jar自己的配置文件里,都进行了配置,那么jar自己的文件里的配置优先级高,会覆盖公共文件里的配置;
比如配置项test.string在配置中心里的公共文件wsfy-master-config.yml 和 wsfy-api-dev.yml 都进行了配置,那么启动wsfy-api项目,哪个配置会生效呢,本地测试了一下,是wsfy-api-dev.yml里的配置生效了。

2.相对于公共文件,或相对于个jar自己的文件,新增的配置是否有效?

在公共配置文件,或者jar自己的文件里新增的配置,都会生效;项目读取的两个配置文件的合集;并且公共配置文件里的配置信息,是全局的,可以被其他jar读取;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值