SpringCloud-Spring Cloud Config配置中心實(shí)現(xiàn)

Spring Cloud Config(以下簡(jiǎn)稱配置中心)支持配置放在本地的配置服務(wù)內(nèi)存中,同時(shí)也可以放在git倉(cāng)庫(kù)中進(jìn)行讀取,本文示例通過git倉(cāng)庫(kù)實(shí)現(xiàn)配置讀取。

一、服務(wù)端配置

  • 服務(wù)端配置分創(chuàng)建配置git倉(cāng)庫(kù)和服務(wù)端配置讀取。
1、git倉(cāng)庫(kù)創(chuàng)建

在創(chuàng)建配置中心時(shí)為后續(xù)維護(hù)方便,應(yīng)對(duì)配置文件進(jìn)行分包、分環(huán)境進(jìn)行創(chuàng)建。具體注意事項(xiàng)見代碼注釋

  1. 分包:這里所指的分包其實(shí)是只git的目錄結(jié)構(gòu)符合一定規(guī)則。
  2. 分環(huán)境:不同的環(huán)境對(duì)應(yīng)不同的配置,比如:生產(chǎn)環(huán)境、測(cè)試環(huán)境、開發(fā)環(huán)境。

示例配置文件:config-client-dev.properties(該配置文件命名應(yīng)符合一定規(guī)則,具體說明見客戶端代碼注釋)
配置信息如下:

file = 1.jpg
word = 666

2、配置中心服務(wù)搭建
  • maven配置
<groupId>com.wk.sc</groupId>
    <artifactId>springcloud-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
          <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  • application.yml配置
server:
  port: 6060

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/umeone/springcloud-config.git  # 配置文件存放git地址,基于哪個(gè)git平臺(tái)或自己搭建,隨意
          search-paths: pro-test # 配置文件存放路徑(文件夾),如果配置文件在項(xiàng)目根目錄,則不需要配置該值
          username:   # git賬號(hào)  當(dāng)git項(xiàng)目創(chuàng)建為public時(shí),不需要username和password
          password:  # git密碼
      label: master # git配置文件所在分支
  • 啟動(dòng)類
@EnableConfigServer  //開啟配置服務(wù)器功能
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }

}

至此,簡(jiǎn)單的配置中心服務(wù)端就算搭建完成了。啟動(dòng)服務(wù)進(jìn)行測(cè)試,看是否搭建成功。
執(zhí)行請(qǐng)求:http://localhost:6060/config-client/dev (該地址符合一定規(guī)則,客戶端配置文件注釋會(huì)說明) 得到如下返回結(jié)果:

{
    "name": "config-client",
    "profiles": ["dev"],
    "label": null,
    "version": "167af1f8aeb67958c22f656d2e14b032f6319da2",
    "state": null,
    "propertySources": [{
        "name": "https://gitee.com/umeone/springcloud-config.git/config-client-dev.properties",
        "source": {
            "file": "1.jpg",
            "word": "666"
        }
    }]
}

從該結(jié)果中可以看到,git中配置的信息已經(jīng)獲取到,說明服務(wù)沒問題。

二、客戶端配置

客戶端通過配置中心讀取git的配置信息,需要注意一些細(xì)節(jié)和規(guī)則,詳情在代碼注釋中進(jìn)行描述。

  • maven配置
<groupId>com.wk.sc</groupId>
    <artifactId>springcloud-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
           <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--注意與配置中心服務(wù)端不同-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  • bootstrap.yml配置
#  注意此配置文件名為bootstrap.yml,而不是application.yml  后者不是默認(rèn)讀取文件名
server:
  port: 6061

spring:
  application:
    name: config-client1
  cloud:
    config:
      label: master # 指定分支
      profile: dev # 指定環(huán)境, 和配置文件后綴dev一致
      uri: http://localhost:6060/  # 配置服務(wù)中心地址
      name: config-client

    # spring.cloud.config.name 值和配置文件的名稱保持一定規(guī)則。如此處名稱,在git中的配置文件名應(yīng)為config-client-dev.properties ,前綴保持一致,后面的dev為不同環(huán)境的區(qū)分,這個(gè)規(guī)則和Springboot配置文件的環(huán)境區(qū)分類似。
    # 如果該值沒有配置,項(xiàng)目啟動(dòng)時(shí)會(huì)取spring.application.name值作為默認(rèn)值(這僅僅是個(gè)猜測(cè),通過更改name值進(jìn)行測(cè)試,沒有查看源碼實(shí)現(xiàn),要想確定是否猜測(cè)正確,需要從源碼進(jìn)行確認(rèn))
    # URL與配置文件的映射關(guān)系:
    # /{application}/{profile}[/{label}]
    # /{application}-{profile}.yml
    # /{label}/{application}-{profile}.yml
    # /{application}-{profile}.properties
    # /{label}/{application}-{profile}.properties

此處需要特別注意,配置文件名變成了bootstrap.yml,如果使用application.yml,項(xiàng)目啟動(dòng)時(shí)不會(huì)去加載配置信息,所有配置將采用默認(rèn)配置

  • 啟動(dòng)類和配置獲取
@RestController
@SpringBootApplication
public class ConfigClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }

    @Value("${file}")  //如果配置中心獲取失敗則項(xiàng)目啟動(dòng)報(bào)錯(cuò)
    private String file;
    @Value("${word}")
    private String word;

    @RequestMapping(value = "/test")
    public String test() {
        return file + ":" + word;
    }
}

至此客戶端配置完成。啟動(dòng)項(xiàng)目看是否成功,如果報(bào)錯(cuò)提示獲取不到對(duì)應(yīng)配置信息,說明配置有問題,在項(xiàng)目啟動(dòng)的輸出日志中仔細(xì)查看配置信息是否正確。以下為成功啟動(dòng)的部分輸出日志:

2019-04-10 10:00:33.690  INFO 5708 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:6060/
2019-04-10 10:00:35.368  INFO 5708 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=config-client, profiles=[dev], label=master, version=167af1f8aeb67958c22f656d2e14b032f6319da2, state=null
2019-04-10 10:00:35.368  INFO 5708 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://gitee.com/umeone/springcloud-config.git/config-client-dev.properties'}]}
2019-04-10 10:00:35.372  INFO 5708 --- [           main] com.wk.sc.cc.ConfigClientApplication     : No active profile set, falling back to default profiles: default

如果啟動(dòng)報(bào)錯(cuò),注意查看Fetching config from server Located environment Located property source對(duì)應(yīng)值是否是配置文件所配置的信息。
上文提到的配置文件名稱bootstrap.yml如果不正確,就會(huì)出現(xiàn)配置信息和這里的加載信息不一致的問題,可以明顯看出項(xiàng)目啟動(dòng)加載的是默認(rèn)配置信息。

1.jpg:666

以上結(jié)果說明配置可用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 終于,第十篇了。算是達(dá)成了我的目標(biāo)的十分之一吧,應(yīng)該慶祝一下。 有很多方式可以和自己對(duì)話,來真正的...
    張雅琛閱讀 423評(píng)論 2 2
  • “等多久,夢(mèng)多久,一百年,一千年,就算沒有了黑夜白晝,我也要追到三界的盡頭;誰說神仙不愁秋,誰說仙魔世隔兩頭,...
    云公子閱讀 1,818評(píng)論 6 12
  • 常聽到別人說:我希望他/她有什么話當(dāng)面說,不要在別后中傷人。一些人信以為真,而實(shí)際上,我的實(shí)踐證明,當(dāng)面說別人壞話...
    結(jié)實(shí)的鱷魚閱讀 309評(píng)論 0 1
  • 哈哈哈
    一起去月球閱讀 362評(píng)論 0 0

友情鏈接更多精彩內(nèi)容