Nacos 是什么?
本文基于: Nacos 1.4.0
-
官方介紹
Nacos 致力于幫助您發(fā)現(xiàn)炮温、配置和管理微服務(wù)霎槐。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)笤受、服務(wù)配置犯戏、服務(wù)元數(shù)據(jù)及流量管理椒涯。
Nacos 幫助您更敏捷和容易地構(gòu)建垂蜗、交付和管理微服務(wù)平臺伟墙。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施手素。
核心特點:
既可以是注冊中心也可以是配置中心
-
服務(wù)是一等公民
-
服務(wù)(Service)是 Nacos 世界的一等公民吕喘。Nacos 支持幾乎所有主流類型的“服務(wù)”的發(fā)現(xiàn)、配置和管理:
Kubernetes Service
gRPC & Dubbo RPC Service
Spring Cloud RESTful Service
-
-
Nacos 的關(guān)鍵特性包括:
-
服務(wù)發(fā)現(xiàn)
默認支持服務(wù)健康監(jiān)測
- Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)
-
配置中心
-
默認支持動態(tài)配置刷新功能,無需額外配置
- 在Nacos控制臺修改了配置后,點擊發(fā)布時,會自動通知Nacos客戶端更新本地緩存的配置文件刑桑。如果客戶端的某個變量值就來自配置文件那么可以結(jié)合 @RefreshScope 注解實現(xiàn)變量值的更新。
動態(tài)配置服務(wù)可以讓您以中心化募舟、外部化和動態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置祠斧。
動態(tài)配置消除了配置變更時重新部署應(yīng)用和服務(wù)的需要,讓配置管理變得更加高效和敏捷拱礁。
配置中心化管理讓實現(xiàn)無狀態(tài)服務(wù)變得更簡單琢锋,讓服務(wù)按需彈性擴展變得更容易。
Nacos 提供了一個簡潔易用的UI (控制臺樣例 Demo) 幫助您管理所有的服務(wù)和應(yīng)用的配置呢灶。
-
Nacos 還提供包括配置版本跟蹤吴超、金絲雀發(fā)布、一鍵回滾配置以及客戶端配置更新狀態(tài)跟蹤在內(nèi)的一系列開箱即用的配置管理特性
鸯乃,幫助您更安全地在生產(chǎn)環(huán)境中管理配置變更和降低配置變更帶來的風險鲸阻。NACOS server 會記錄配置文件的歷史版本,保留30天缨睡,同時還貼心的提供了一鍵回滾功能鸟悴,回滾操作將會觸發(fā)配置更新。
-
配置快照(本地)
Nacos 的客戶端 SDK 會在本地生成配置的快照奖年。當客戶端無法連接到 Nacos Server 時细诸,可以使用配置快照顯示系統(tǒng)的整體容災(zāi)能力。
-
-
動態(tài) DNS 服務(wù)
動態(tài) DNS 服務(wù)支持權(quán)重路由陋守,讓您更容易地實現(xiàn)中間層負載均衡震贵、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單DNS解析服務(wù)水评。動態(tài)DNS服務(wù)還能讓您更容易地實現(xiàn)以 DNS 協(xié)議為基礎(chǔ)的服務(wù)發(fā)現(xiàn)猩系,以幫助您消除耦合到廠商私有服務(wù)發(fā)現(xiàn) API 上的風險。
Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務(wù)的關(guān)聯(lián)域名和可用的 IP:PORT 列表.
-
服務(wù)及其元數(shù)據(jù)管理
Nacos 能讓您從微服務(wù)平臺建設(shè)的視角管理數(shù)據(jù)中心的所有服務(wù)及元數(shù)據(jù)之碗,包括管理服務(wù)的描述蝙眶、生命周期、服務(wù)的靜態(tài)依賴分析、服務(wù)的健康狀態(tài)幽纷、服務(wù)的流量管理式塌、路由及安全策略、服務(wù)的 SLA 以及最首要的 metrics 統(tǒng)計數(shù)據(jù)友浸。
-
-
Nacos 地圖
-
Nacos 概念
-
Nacos 架構(gòu)
怎么用?
-
文檔與代碼
Nacos官方Git地址:https://github.com/alibaba/nacos
Nacos官方文檔地址:https://nacos.io/zh-cn/docs/
2.1 快速開始 - 安裝 Nacos Server
-
2020-08 : 當前推薦的穩(wěn)定版本為 1.4.0 峰尝。
下載源碼或者安裝包
你可以通過源碼和發(fā)行包兩種方式來獲取 Nacos。
-
從 Github 上下載源碼方式
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/// change the version/nacos/bin
-
下載編譯后的壓縮包方式
-
您可以從 最新穩(wěn)定版本 下載 nacos-server-$version.zip 包收恢。
unzip nacos-server-version.tar.gz
cd nacos/bin 解壓后可以發(fā)現(xiàn),其實是個 SpringBoot 工程
-
啟動服務(wù)器
-
Linux/Unix/Mac
啟動命令(standalone代表著單機模式運行武学,非集群模式):sh startup.sh -m standalone
-
如果您使用的是ubuntu系統(tǒng),或者運行腳本報錯提示[[符號找不到伦意,可嘗試如下運行:
bash startup.sh -m standalone
-
Windows
啟動命令:
cmd startup.cmd
或者雙擊startup.cmd運行文件火窒。
啟動后可以在日志文件后看到
: | \ | : ,--.--. ,---. / / | / / ' Pid: 2423
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://169.254.212.54:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
* 默認用戶名密碼: nacos/nacos
-
Tips:
- 如果想修改JVM參數(shù),那么直接修改 startup.sh 文件即可驮肉。
- 如果想修改 Nacos 的端口: 安裝目錄: /nacos/conf/application.properties 文件中修改即可
進入控制臺
-
Nacos有幾個基礎(chǔ)概念熏矿,我們只有先了解清楚之后才能更好的結(jié)合到業(yè)務(wù)場景:
namespace 命名空間
Group 配置分組
DataID 具體的配置文件名稱,例如: application-dev.yml
一般我們使用namespace來區(qū)分不同的項目或環(huán)境。
不同的 namespace 或者不同的 Group 之間的配置與服務(wù)都是隔離的
-
Group 區(qū)分配置的差異系比如A業(yè)務(wù)獲取的配置和B團隊的有一些細微的差別可以通過Group來區(qū)分离钝。
配置分組票编,建議填寫產(chǎn)品名:模塊名(Nacos:Test)保證唯一性,只允許英文字符和4種特殊字符("."卵渴、":"慧域、"-"、"_")浪读,不超過128字節(jié)昔榴。
需要在客戶端的bootstrap.properties來添加分組信息才能取到非默認組的文件
最后使用DataId來區(qū)分具體的配置文件。
一個 DataID 就對應(yīng)一個配置文件碘橘。
-
如果需要使用 Nacos 的配置中心功能
-
首先新建一個命名空間 - 不創(chuàng)建則會使用默認的命名空間(public)
比如: 先創(chuàng)建一個 sms-dev 表示短信平臺項目 Dev 環(huán)境
目前一個命名空間下最多可以配置 200 個配置文件论泛。
-
在配置管理頁面新建一個配置
* DataID : sms-api-service-dev.yaml * Group : DEFAULT_GROUP * 配置格式: YAML * 配置內(nèi)容: user.name: sms-api-service-dev-yaml user.age: 68
-
注意:注意dataid是以 properties(默認的文件擴展名方式)為擴展名。如果要使用 yml 或者 yaml
-
在應(yīng)用的 bootstrap.properties 配置文件中顯示的聲明 dataid 文件擴展名蛹屿。如下所示
-
bootstrap.properties
spring.cloud.nacos.config.file-extension=yaml
-
-
-
注意: 如果不使用 DEFAULT_GROUP , 則需要在客戶端的bootstrap.properties來添加分組信息才能取到非默認組的文件
spring.cloud.nacos.config.group=myGroup1
新建完成后,也有對應(yīng)的JAVA系的示例代碼
-
-
2.2 Nacos Spring Cloud 快速開始
本文主要面向 Spring Cloud 的使用者屁奏,通過兩個示例來介紹如何使用 Nacos 來實現(xiàn)分布式環(huán)境下的配置管理和服務(wù)注冊發(fā)現(xiàn)。
-
關(guān)于 Nacos Spring Cloud 的詳細文檔請參看:Nacos Config 和 Nacos Discovery错负。
通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實現(xiàn)配置的動態(tài)變更坟瓢。
通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實現(xiàn)服務(wù)的注冊與發(fā)現(xiàn)。
-
前提
您需要先下載 Nacos 并啟動 Nacos server犹撒。
-
使用配置中心
-
客戶端依賴
-
parent.xml - 采用公共版本依賴管理的方式
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR4</version> <type>pom</type> <scope>import</scope> </dependency> <dependencyManagement> <dependencies> <!--spring cloud alibaba--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.0.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependencies> <dependencyManagement>
-
my-demo.xml
<!--配置中心客戶端--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
注意: 關(guān)于 SpringCloudAlibaba 跟 SpringCloud 跟 SpringBoot 的版本是有對照關(guān)系的
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
-
-
然后必須配置下面這兩個配置項
spring.application.name=nacos-demo # spring.cloud.nacos.config.server-addr :Nacos 服務(wù)器的地址和端口 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
-
server-addr 屬性
-
代碼位置: com.alibaba.nacos.client.config.impl.ServerListManager#ServerListManager(java.util.Properties)
if (StringUtils.isNotEmpty(serverAddrsStr)) { isFixed = true; List<String> serverAddrs = new ArrayList<String>(); String[] serverAddrsArr = serverAddrsStr.split(","); for (String serverAddr: serverAddrsArr) { if (serverAddr.startsWith(HTTPS) || serverAddr.startsWith(HTTP)) { serverAddrs.add(serverAddr); } else { String[] serverAddrArr = serverAddr.split(":"); if (serverAddrArr.length == 1) { serverAddrs.add(HTTP + serverAddrArr[0] + ":" + ParamUtil.getDefaultServerPort()); } else { serverAddrs.add(HTTP + serverAddr); } } } serverUrls = serverAddrs; if (StringUtils.isBlank(namespace)) { name = FIXED_NAME + "-" + getFixedNameSuffix(serverUrls.toArray(new String[serverUrls.size()])); } else { this.namespace = namespace; this.tenant = namespace; name = FIXED_NAME + "-" + getFixedNameSuffix(serverUrls.toArray(new String[serverUrls.size()])) + "-" + namespace; } }
-
從源碼可知
實際上是支持配置多個地址的折联,只需要用 ; 分割。 不具有客戶端負載均衡的效果识颊,但是有高可用的效果诚镰。
如果配置的某個地址沒有帶上 ":port" 部分奕坟,那么默認會把 8848 作為端口號來拼接。因此在你搭建了NacosVip的情況下,建議讓Nginx也監(jiān)聽 8848 端口清笨,或者在你的vip后面補充一個 :80 即可月杉。
-
-
說明:之所以需要配置 spring.application.name ,是因為它是構(gòu)成 Nacos 配置管理 dataId字段的一部分抠艾。
-
在 Nacos Spring Cloud 中苛萎,dataId 的完整格式如下:
{spring.profile.active}.${file-extension}
prefix 默認為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix 來配置检号。
spring.profile.active 即為當前環(huán)境對應(yīng)的 profile腌歉,詳情可以參考 Spring Boot文檔。 注意:當 spring.profile.active 為空時齐苛,對應(yīng)的連接符 - 也將不存在翘盖,dataId 的拼接格式變成
{file-extension}file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置凹蜂。目前只支持 properties 和 yaml 類型最仑。
以上面的例兩行配置為例: 此時將會加載 nacos 中 默認(public) 命名空間下的, DEFAULT_GROUP 分組下的 DataID 為 nacos-demo.properties 文件。
-
如果需要加載指定命名空間(sms-dev)下非默認分組(MY_GROUP1)下的DataID 為 sms-api-service-dev.yaml 的配置文件
-
bootstrap.yml
spring: application: name: @artifactId@ cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml namespace: sms-dev group: MY_GROUP1 profiles: active: @profiles.active@
-
pom.xml 中配置的 artifactId 為 sms-api-service, rofiles.active 為 dev
- 當然也可以不引用 pom.xml 中的配置炊甲。直接在 bootstrap.yml 中寫入這兩個值。
-
-
-
注意
當你使用域名的方式來訪問 Nacos 時欲芹,spring.cloud.nacos.config.server-addr 配置的方式為 域名:port卿啡。 例如 Nacos 的域名為abc.com.nacos,監(jiān)聽的端口為 80菱父,則 spring.cloud.nacos.config.server-addr=abc.com.nacos:80颈娜。 注意 80 端口不能省略。
-
示例: 在SpringBoot中打印配置
public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args); String userName = applicationContext.getEnvironment().getProperty("user.name"); String userAge = applicationContext.getEnvironment().getProperty("user.age"); System.err.println("user name :"+userName+"; age: "+userAge); }
-
-
完全關(guān)閉配置
通過設(shè)置 spring.cloud.nacos.config.enabled = false 來完全關(guān)閉 Spring Cloud Nacos Config
-
-
使用注冊中心 - Nacos discovery
-
依賴配置
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
pom.xml的配置浙宜。一個完整的 pom.xml 配置如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>open.source.test</groupId> <artifactId>nacos-discovery-test</artifactId> <version>1.0-SNAPSHOT</version> <name>nacos-discovery-test</name> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>${spring.boot.version}</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <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> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
-
-
啟動一個 Provider 應(yīng)用
-
在 bootstrap.properties 中或者 application.properties 中配置
server.port=8081 spring.application.name=nacos-producer spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # management.endpoints.web.exposure.include=*
-
應(yīng)用程序啟動類添加 @EnableDiscoveryClient 注解官辽。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {public static void main(String[] args) { SpringApplication.run(NacosProducerDemoApplication.class, args); } @RestController public class EchoController { @GetMapping(value = "/echo/{string}") public String echo(@PathVariable String string) { return "Hello Nacos Discovery " + string; } }
}
-
-
服務(wù)的 EndPoint
spring-cloud-starter-alibaba-nacos-discovery 在實現(xiàn)的時候提供了一個EndPoint,EndPoint的訪問地址為 http://ip:port/actuator/nacos-discovery。 EndPoint 的信息主要提供了兩類:
- subscribe: 顯示了當前有哪些服務(wù)訂閱者
- NacosDiscoveryProperties: 顯示了當前服務(wù)實例關(guān)于 Nacos 的基礎(chǔ)配置
-
啟動一個 Consumer 應(yīng)用
Consumer 的應(yīng)用可能還沒像啟動一個 Provider 應(yīng)用那么簡單粟瞬。因為在 Consumer 端需要去調(diào)用 Provider 端提供的REST 服務(wù)同仆。例子中我們使用最原始的一種方式, 即顯示的使用 LoadBalanceClient 和 RestTemolate 結(jié)合的方式來訪問裙品。
Note
通過帶有負載均衡的RestTemplate 和 FeignClient 也是可以訪問的俗批。@SpringBootApplication @EnableDiscoveryClient public class NacosConsumerApp { @RestController public class NacosController{ @Autowired private LoadBalancerClient loadBalancerClient; @Autowired private RestTemplate restTemplate; @Value("${spring.application.name}") private String appName; @GetMapping("/echo/app-name") public String echoAppName(){ //使用 LoadBalanceClient 和 RestTemolate 結(jié)合的方式來訪問 ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider"); String url = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName); System.out.println("request url:"+url); return restTemplate.getForObject(url,String.class); } } //實例化 RestTemplate 實例 @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(NacosConsumerApp.class,args); } }
這個例子中我們注入了一個 LoadBalancerClient 的實例,并且手動的實例化一個 RestTemplate市怎,同時將 spring.application.name 的配置值 注入到應(yīng)用中來岁忘, 目的是調(diào)用 Provider 提供的服務(wù)時,希望將當前配置的應(yīng)用名給顯示出來区匠。
- Note
在啟動 Consumer 應(yīng)用之前請先將 Nacos 服務(wù)啟動好干像。具體啟動方式可參考 Nacos 官網(wǎng)。
啟動后,訪問 Consumer 提供出來的 http://ip:port/echo/app-name 接口麻汰。我這里測試啟動的 port是 8082速客。訪問結(jié)果如下所示:
訪問地址:http://127.0.0.1:8082/echo/app-name 訪問結(jié)果:Hello Nacos Discovery nacos-consumer
- Note
-
關(guān)于 Nacos Starter 更多的配置項信息
-
例如:
集群 spring.cloud.nacos.discovery.cluster-name DEFAULT 配置成Nacos集群名稱
AccessKey spring.cloud.nacos.discovery.access-key 無 當要上阿里云時,阿里云上面的一個云賬號名
是否開啟Nacos Watch spring.cloud.nacos.discovery.watch.enabled true 可以設(shè)置成false來關(guān)閉 watch
命名空間 spring.cloud.nacos.discovery.namespace 無 常用場景之一是不同環(huán)境的注冊的區(qū)分隔離什乙,例如開發(fā)測試環(huán)境和生產(chǎn)環(huán)境的資源(如配置挽封、服務(wù))隔離等
-
-
Note
- 如果不想使用 Nacos 作為您的服務(wù)注冊與發(fā)現(xiàn),可以將 spring.cloud.nacos.discovery.enabled 設(shè)置為 false臣镣。
- 官方參考
-
* 示例: https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example
* 詳細:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
3. 示例-客戶端配置Nacos注冊中心與配置中心
-
pom.xml
```xml <!--注冊中心客戶端--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--配置中心客戶端--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ```
-
bootstrap.yml
server: port: 7002 spring: application: name: @artifactId@ cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: sms-dev # 設(shè)置 nacos client 使用這個 ip 注冊到 nacos server , 若不配置則會自動探測辅愿。 #ip: 192.160.22.22 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml namespace: sms-dev group: DEFAULT_GROUP shared-configs: - data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} group: @nacos.group@ refresh: false profiles: active: @profiles.active@
-
注意:版本 2.1.x.RELEASE 對應(yīng)的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 對應(yīng)的是 Spring Boot 2.0.x 版本忆某,版本 1.5.x.RELEASE 對應(yīng)的是 Spring Boot 1.5.x 版本点待。
注意: 關(guān)于 Nacos 的配置需要在 bootstrap.yaml 中配置。
-
注意: @RefreshScope與數(shù)據(jù)源之間存在沖突F妗癞埠!
因為項目是多數(shù)據(jù)源,所以使用的是自定義數(shù)據(jù)源配置的DataSource聋呢,用@Bean注入苗踪。
在SpringBoot 2.0以上默認使用Hikari連接池,一旦連接池啟動削锰,就無法再修改HikariDataSource通铲,所以刷新配置時連帶數(shù)據(jù)源一起刷新,于是會報錯器贩。
Caused by: java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes.
解決方法: 在自定義的DataSource上加入注解@RefreshScope颅夺,或者使用spring.scloud.refresh.extra-refreshable配置指定classname列表即可。
查看Hikari的默認配置即可發(fā)現(xiàn)蛹稍,這個與刷新配置之間是存在沖突的吧黄。 因此在數(shù)據(jù)源配置類中加入注釋,這樣每次刷新配置的時候會重新刷新這個Bean唆姐,那么就可以保證不會報錯拗慨,這樣的spring的刷新機制就可以順利執(zhí)行下去了概作。
4. 常見問題
-
SpringCloud 以及NACOS服務(wù)注冊IP選擇問題
-
Nacos 權(quán)限配置
Server端打開權(quán)限控制開關(guān)茂装。修改con/application.properties內(nèi)容:
nacos.core.auth.enabled=true
這個開關(guān)采用了熱加載模式,無需重啟Server即可生效醋粟。因此當權(quán)限控制功能使用有異常時仗阅,可以直接回滾到不鑒權(quán)的模式昌讲。