SpringCloud實戰項目全套學習教程連載中
PassJava 學習教程
簡介
- PassJava-Learning項目是PassJava(佳必過)項目的學習教程。對架構、業務、技術要點進行講解。
- PassJava 是一款Java
面試刷題
的開源系統,可以用零碎時間利用小程序查看常見面試題,夯實Java基礎。 - PassJava 項目可以教會你如何搭建SpringBoot項目,Spring Cloud項目
- 采用流行的技術,如 SpringBoot、MyBatis、Redis、 MySql、 MongoDB、 RabbitMQ、Elasticsearch,采用Docker容器化部署。
更好的閱讀體驗
文檔連載目錄
- 打造一款 刷Java 知識的小程序
- 打造一款 刷Java 知識的小程序(二)
- 01.五分鍾搞懂分布式基礎概念
- 02.快速搭建Linux環境-運維必備
- 03.配置虛擬機網絡
- 04.安裝Docker
- 05.Docker安裝mysql
- 06.Docker安裝redis
- 07.本地開發環境配置
- 08.配置Git
- 09.初始化項目和添加微服務
- 10.PassJava-微服務划分圖
- 11.初始化數據庫和表
- 12.搭建管理后台
- 13.自動生成前后端代碼
- 14.整合MyBatis-Plus實現CRUD
- 15.生成所有微服務的CRUD代碼
- 16.Spring Cloud Alibaba 組件簡介
- 17.SpringCloud整合Alibaba-Nacos組件
- 18.SpringCloud整合OpenFeign組件
- 19.SpringCloud整合Alibaba-Nacos配置中心
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);
}
- 測試結果
總結:從配置文件中獲取配置。
這種方式的缺點是什么呢?如果要修改配置參數,則需要重新啟動服務。如果服務很多,則需要重啟所有服務,非常不方便。
有沒有什么辦法不停服務修改配置而且使其生效呢?
答案:有的,用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 元數據
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
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的配置內容
重啟member服務
訪問方法:/member/sample/test-local-config
執行結果:
{ "msg": "success", "code": 0, "nickname": "\"悟空member\"", "age": 30 }
說明獲取的是passjava-member命名空間的配置
8.分組
如果我們有多套環境,比如開發環境,測試環境,生產環境,每一套環境的配置參數不一樣,那配置中心該如何配置呢?
我們可以使用配置中心的分組
功能。每一套環境都是一套分組。
- 首先創建一套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
配置
2.配置中心新建mybatis.yml
配置
3.配置中心新建more.yml
配置
4.克隆dev環境配置到test和prod環境
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