java開發-springboot項目集成配置中心

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.yml dev
測試環境 application-test.yml test
生產環境 application-prod.yml prod

配置文件名稱裏的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讀取;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章