19.SpringCloud實戰項目-SpringCloud整合Alibaba-Nacos配置中心


SpringCloud實戰項目全套學習教程連載中

PassJava 學習教程

簡介

  • PassJava-Learning項目是PassJava(佳必過)項目的學習教程。對架構、業務、技術要點進行講解。
  • PassJava 是一款Java面試刷題的開源系統,可以用零碎時間利用小程序查看常見面試題,夯實Java基礎。
  • PassJava 項目可以教會你如何搭建SpringBoot項目,Spring Cloud項目
  • 采用流行的技術,如 SpringBoot、MyBatis、Redis、 MySql、 MongoDB、 RabbitMQ、Elasticsearch,采用Docker容器化部署。

更好的閱讀體驗

文檔連載目錄

1.傳統配置方式

  • application.properties文件中定義兩個配置:
member.nickname = "悟空聊架構"
member.age = "18"
  • 示例控制器中定義私有變量nickname和age,@value代表從配置中取值
@Value("${member.nickname}")
private  String nickname;

@Value("$member.age")
private  Integer age;
  • 示例控制器中定義方法:獲取nick和age的值
@RequestMapping("/test-local-config")
public R testLocalConfig() {
    return R.ok().put("nickname", nickname).put("age", age);
}
  • 測試結果

mark

總結:從配置文件中獲取配置。

這種方式的缺點是什么呢?如果要修改配置參數,則需要重新啟動服務。如果服務很多,則需要重啟所有服務,非常不方便。

有沒有什么辦法不停服務修改配置而且使其生效呢?

答案:有的,用Spring Cloud Alibaba的Nacos 組件就可以完成。

2.引入Nacos依賴

PassJava-Common項目的pom.xml文件引入Spring Cloud Alibaba Nacos Config依賴

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

3.配置Nacos元數據

  • passjava-member 添加 /src/main/resources/bootstrap.properties 配置文件(注意:bootstrap.properties 優先級高於其他配置文件)

  • 配置 Nacos Config 元數據

bootstrap.properties

spring.application.name=passjava-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

4.Nacos后台新增配置

Data ID: passjava-member.properties

Group: DEFAULT_GROUP

配置格式:

member.nick="悟空"
member.age=10

Nacos后台新增配置

5.開啟動態刷新配置功能

添加注解@RefreshScope開啟動態刷新配置功能

@RefreshScope
@RestController
@RequestMapping("member/sample")
public class SampleController {}

可以從控制台看到日志信息:

Refresh keys changed: [member.age]
2020-04-19 23:34:07.154  INFO 8796 --- [-127.0.0.1_8848] c.a.nacos.client.config.impl.CacheData   : [fixed-127.0.0.1_8848] [notify-ok] dataId=passjava-member.properties, group=DEFAULT_GROUP, md5=df136e146c83cbf857567e75acb11e2b, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@4f49b78b 
2020-04-19 23:34:07.154  INFO 8796 --- [-127.0.0.1_8848] c.a.nacos.client.config.impl.CacheData   : [fixed-127.0.0.1_8848] [notify-listener] time cost=529ms in ClientWorker, dataId=passjava-member.properties, group=DEFAULT_GROUP, md5=df136e146c83cbf857567e75acb11e2b, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@4f49b78b 

member.age 更新了,通知了member服務,刷新了配置。對應的配置id為passjava-member.properties,分組為DEFAULT_GROUP。監聽器為com.alibaba.cloud.nacos.refresh.NacosContextRefresher

6.測試結果

訪問:http://localhost:10000/member/sample/test-local-config

結果:nickname和age和Nacos后台配置一致

結論:只用在Nacos后台改配置即可實時修改配置。

注意:Nacos的配置項優先級高於application.propertite里面的配置。

測試結果

7.命名空間

我們現在有5個微服務,每個微服務用到的配置可能都不一樣,那不同微服務怎么樣獲取自己微服務的配置呢?

這里可以用到命名空間,我們針對每個微服務,都創建一個命名空間。

  • 創建命名空間

    創建命名空間

# 創建5個命名空間
passjava-channel
passjava-content
passjava-member
passjava-question
passjava-study

命名空間

  • 命名空間下創建配置

    我們打開配置列表菜單,可以看到有五個命名空間。

    命名空間下創建配置

選中passjava-channel命名空間,然后新增配置項,與之前新增配置的步驟一致,也可以通過克隆命名空間來克隆配置。

克隆配置

  • 修改指定的命名空間

    bootstrap.properties配置命名空間

    spring.cloud.nacos.config.namespace=passjava-member
    
  • 測試配置是否生效

    修改passjava-member.properties的配置內容

    passjava-member.properties

    重啟member服務

    訪問方法:/member/sample/test-local-config

    執行結果:

    {
        "msg": "success",
        "code": 0,
        "nickname": "\"悟空member\"",
        "age": 30
    }
    

    說明獲取的是passjava-member命名空間的配置

8.分組

如果我們有多套環境,比如開發環境,測試環境,生產環境,每一套環境的配置參數不一樣,那配置中心該如何配置呢?

我們可以使用配置中心的分組功能。每一套環境都是一套分組。

  • 首先創建一套dev環境配置項,然后克隆配置到test和prod環境

dev環境

dev、test、prod分組

  • bootstrap.properties配置當前使用的分組:prod
spring.cloud.nacos.config.group=prod
  • 測試獲取生產環境配置

    {
        "msg": "success",
        "code": 0,
        "nickname": "\"悟空-prod\"",
        "age": 10
    }
    

    可以看到獲取到的是prod分組的配置

9.多配置集

我們可以將application.yml文件中的datasource、mybatis-plus等配置進行拆解,放到配置中心。group可以創建3套,dev/test/prod。

1.配置中心新建datasource.yml 配置

datasource.yml 配置

2.配置中心新建mybatis.yml 配置

mybatis.yml配置

3.配置中心新建more.yml 配置

more.yml配置

4.克隆dev環境配置到test和prod環境

mark

5.bootstrap.properties增加nacos配置,application.yml注釋配置

spring.application.name=passjava-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.cloud.nacos.config.namespace=passjava-member
spring.cloud.nacos.config.group=prod

spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=more.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true

6.測試配置是否生效

  • 測試passjava-member.properties和more.yml配置是否生效

請求url:http://localhost:10000/member/sample/test-local-config

返回配置的nick和age,且端口是10000,且member服務注冊到注冊中心

{
    "msg": "success",
    "code": 0,
    "nickname": "\"悟空-prod1\"",
    "age": 22
}
  • 測試datasource.yml和mybatis.yml配置是否生效

請求url:http://localhost:10000/member/member/list

返回數據庫查詢結果

{
    "msg": "success",
    "code": 0,
    "page": {
        "totalCount": 0,
        "pageSize": 10,
        "totalPage": 0,
        "currPage": 1,
        "list": []j
    }
}

說明以上配置都生效了。

更多配置項

配置項 key 默認值 說明
服務端地址 spring.cloud.nacos.config.server-addr
DataId前綴 spring.cloud.nacos.config.prefix spring.application.name
Group spring.cloud.nacos.config.group DEFAULT_GROUP
dataID后綴及內容文件格式 spring.cloud.nacos.config.file-extension properties dataId的后綴,同時也是配置內容的文件格式,目前只支持 properties
配置內容的編碼方式 spring.cloud.nacos.config.encode UTF-8 配置的編碼
獲取配置的超時時間 spring.cloud.nacos.config.timeout 3000 單位為 ms
配置的命名空間 spring.cloud.nacos.config.namespace 常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源隔離等。
AccessKey spring.cloud.nacos.config.access-key
SecretKey spring.cloud.nacos.config.secret-key
相對路徑 spring.cloud.nacos.config.context-path 服務端 API 的相對路徑
接入點 spring.cloud.nacos.config.endpoint UTF-8 地域的某個服務的入口域名,通過此域名可以動態地拿到服務端地址
是否開啟監聽和自動刷新 spring.cloud.nacos.config.refresh-enabled true

10.使用Nacos總結

  • 1.引入Nacos依賴

  • 2.配置Nacos數據源

  • 3.配置中心配置數據集DataId和配置內容

  • 4.開啟動態刷新配置@RefreshScope

  • 5.獲取配置項的值@value

  • 6.優先使用配置中心的配置

  • 7.使用命名空間namespace來創建各服務的配置

  • 8.使用分組group來區分不同環境

  • 9.使用多配置集extension-configs區分不同類型的配置

代碼地址

https://github.com/Jackson0714/PassJava-Platform

公眾號

公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM