使用Nacos打造微服務(wù)配置中心詳解
一、背景介紹
Nacos 作為服務(wù)注冊(cè)中心的使用方式,同時(shí) Nacos 還可以作為服務(wù)配置中心,用于集中式維護(hù)各個(gè)業(yè)務(wù)微服務(wù)的配置資源。
作為服務(wù)配置中心的交互流程圖如下。

這樣設(shè)計(jì)的目的,有一個(gè)明顯的好處就是:有利于對(duì)各個(gè)微服務(wù)的配置資源進(jìn)行統(tǒng)一維護(hù)和管理,尤其是要更新某個(gè)配置參數(shù)時(shí),能避免大量人肉運(yùn)維工作。
今天通過(guò)一些案例我們一起來(lái)了解一下,如何使用 Nacos 來(lái)實(shí)現(xiàn)服務(wù)配置中心的管理。
二、方案實(shí)踐
2.1、創(chuàng)建配置
Nacos 安裝過(guò)程與之前介紹的一樣,Nacos 服務(wù)端啟動(dòng)后,進(jìn)入到服務(wù)端管理頁(yè)面,在“配置列表”功能頁(yè)面中,點(diǎn)擊右上角的“+”按鈕,進(jìn)入“新建配置”頁(yè)面,創(chuàng)建配置內(nèi)容,示例如下:


為了便于演示,在上文中我們創(chuàng)建了一個(gè) dataId 為nacos-config-client.properties,Group 為DEFAULT_GROUP,內(nèi)容為blog.name=張三的配置信息。
在下文中,我們將會(huì)用到它。
2.2、創(chuàng)建客戶端應(yīng)用
首先,創(chuàng)建一個(gè) Maven 工程,命名為nacos-config-client,并在pom.xml中引入相關(guān)的依賴內(nèi)容,示例如下:
<properties>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<!-- SpringBoot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- 引入 springBoot 版本號(hào) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 引入 spring cloud 版本號(hào) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 引入 spring cloud alibaba 適配的版本號(hào) -->
<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>接著,創(chuàng)建一個(gè)服務(wù)啟動(dòng)類。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}然后,創(chuàng)建一個(gè) web 接口,以便測(cè)試上文創(chuàng)建的配置變量是否能生效。
@RestController
@RefreshScope
public class HelloController {
@Value("${blog.name}")
private String name;
@RequestMapping("/hello")
public String hello() {
return name;
}
}最后,在application.properties配置文件中,添加 Nacos 服務(wù)配置中心地址,示例如下:
spring.application.name=nacos-config-client server.port=9012 # 設(shè)置Nacos配置中心地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
2.3、服務(wù)測(cè)試
將nacos-config-client客戶端服務(wù)啟動(dòng)起來(lái),在瀏覽器中訪問(wèn)http://127.0.0.1:9012/hello,如果不出意外的話,會(huì)返回如下結(jié)果。

此時(shí)說(shuō)明 SpringBoot 已成功從 Nacos 服務(wù)端獲取到相關(guān)的配置變量。
下面我們?cè)?Nacos 中將blog.name配置內(nèi)容稍微修改一下,驗(yàn)證一下客戶端的配置變量是否能動(dòng)態(tài)刷新。

再次訪問(wèn)http://127.0.0.1:9012/hello,返回結(jié)果如下圖。

說(shuō)明在 Nacos 中修改配置變量后,SpringBoot 也會(huì)自動(dòng)刷新這個(gè)配置信息。
之所以能實(shí)現(xiàn)這種效果,主要得益于@RefreshScope注解,它可以動(dòng)態(tài)的從 Nacos 服務(wù)端獲取最新的配置信息,并將其注入到 SpringBoot 中。
三、配置規(guī)則介紹
在上文中,我們簡(jiǎn)單的介紹了 Nacos 作為配置中心的使用方式。
例子中我們只配置了 Nacos 的配置中心地址信息,并沒(méi)有配置任何其他規(guī)則就能成功的使用 Nacos 配置中心,它是如何做到的呢?
在 Nacos Spring Cloud 中有 5 個(gè)核心配置項(xiàng),下面我們一起來(lái)看看它的作用。
spring.cloud.nacos.config.server-addr:對(duì)應(yīng) Nacos 服務(wù)端地址spring.cloud.nacos.config.prefix:對(duì)應(yīng) DataId 的前綴,默認(rèn)值為應(yīng)用名稱,即spring.application.name變量值spring.cloud.nacos.config.file-extension:對(duì)應(yīng) DataId 的后綴,同時(shí)也是配置內(nèi)容的文件格式,默認(rèn)值為propertiesspring.cloud.nacos.config.group:對(duì)應(yīng) Group 參數(shù),默認(rèn)值為DEFAULT_GROUPspring.cloud.nacos.config.namespace:對(duì)應(yīng)配置的命名空間,默認(rèn)為空;常用于不同環(huán)境的配置隔離,如開(kāi)發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的資源隔離等
默認(rèn)情況下,Nacos Spring Cloud 加載出來(lái)的 dataId 完整格式如下:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}因此,在不做任何配置項(xiàng)目的情況下,當(dāng) DataId 的前綴和 Spring Boot 應(yīng)用名稱一致,就可以成功加載對(duì)應(yīng)的配置項(xiàng)。
如果我們不想通過(guò)應(yīng)用服務(wù)名稱來(lái)加載 DataId,可以借助spring.cloud.nacos.config.prefix相關(guān)規(guī)則來(lái)實(shí)現(xiàn)指定配置項(xiàng)的加載。
需要特別注意的是:由于 Spring Boot 加載順序的緣故,自定義的配置項(xiàng)參數(shù)必須放在bootstrap.properties文件或者bootstrap.yaml文件中才能生效。
下面我們還是通過(guò)一個(gè)例子,來(lái)快速了解 Nacos Spring Cloud 相關(guān)配置規(guī)則的應(yīng)用。
3.1、應(yīng)用實(shí)踐
下面我們以加載myConfig-dev.yaml配置項(xiàng)為例,具體實(shí)現(xiàn)如下。
首先,創(chuàng)建一個(gè)myConfig-dev配置項(xiàng)。

接著,創(chuàng)建一個(gè)bootstrap.properties文件,并指定相關(guān)配置項(xiàng),內(nèi)容如下:
spring.application.name=nacos-config-client server.port=9012 # 指定運(yùn)行環(huán)境 spring.profiles.active=dev # 設(shè)置Nacos配置中心地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # 對(duì)應(yīng) DataId 的前綴,如果不設(shè)置默認(rèn)取【spring.application.name】 spring.cloud.nacos.config.prefix=myConfig # 對(duì)應(yīng) DataId 的后綴,同時(shí)也是配置內(nèi)容的文件格式,默認(rèn)值為properties spring.cloud.nacos.config.file-extension=yaml # 對(duì)應(yīng) Group 參數(shù),默認(rèn)值為DEFAULT_GROUP spring.cloud.nacos.config.group=DEFAULT_GROUP # 對(duì)應(yīng)配置的命名空間,默認(rèn)為空 spring.cloud.nacos.config.namespace=
然后,創(chuàng)建一個(gè) web 接口,以便驗(yàn)證配置變量是否能生效。
@RestController
@RefreshScope
public class HelloController {
@Value("${user.id}")
private String id;
@Value("${user.name}")
private String name;
@RequestMapping("/test")
public String test() {
return "id" + id + ",name:" + name;
}
}最后,再次啟動(dòng)服務(wù),在瀏覽器中訪問(wèn)http://127.0.0.1:9012/hello,如果不出意外的話,會(huì)返回如下內(nèi)容。

說(shuō)明,Spring Boot 已成功加載了指定配置項(xiàng)。
四、高級(jí)特性介紹
4.1、多環(huán)境配置介紹
在 Nacos 服務(wù)端,其實(shí)還隱含有三個(gè)核心的參數(shù),分別是:Data ID、Group、Namespace,我們可以利用它來(lái)實(shí)現(xiàn)更高級(jí)的功能。
這三個(gè)參數(shù)的層級(jí)關(guān)系,可以用如下圖來(lái)概括。

每個(gè)參數(shù)的作用如下:
Namespace:表示命名空間,通常用于不同環(huán)境的配置隔離,如開(kāi)發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的資源隔離等Group:表示分組管理Data ID:也就是我們常說(shuō)的配置項(xiàng),也可以簡(jiǎn)單理解為我們所說(shuō)的配置文件
實(shí)際上,我們可以利用這些層級(jí)概念的關(guān)系,根據(jù)自己的需要來(lái)實(shí)現(xiàn)多環(huán)境的管理。
下面我們一起來(lái)看看,幾種常見(jiàn)的環(huán)境隔離配置實(shí)現(xiàn)。
4.1.1、profiles 隔離實(shí)現(xiàn)
在上文中我們也提到了 dataId 完整格式生成規(guī)則。
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}因此,我們可以借助spring.profiles.active來(lái)實(shí)現(xiàn)配置資源的隔離。

同時(shí),profiles 隔離實(shí)現(xiàn)也在一種最常見(jiàn)的做法。
4.1.2、Group 隔離實(shí)現(xiàn)
Group 隔離實(shí)現(xiàn)就比較簡(jiǎn)單了,在 Nacos 服務(wù)管理平臺(tái)新建配置的時(shí)候,填寫(xiě)所屬分組。

最后,在客戶端應(yīng)用下填寫(xiě)對(duì)應(yīng)的 Group 參數(shù)即可。
# 對(duì)應(yīng) Group 參數(shù) spring.cloud.nacos.config.group=DEFAULT_GROUP
4.1.3、Namespace 隔離實(shí)現(xiàn)
Namespace 隔離實(shí)現(xiàn)主要通過(guò)命名空間來(lái)完成,在 Nacos 服務(wù)管理平臺(tái)的命令空間下創(chuàng)建。

創(chuàng)建完成之后,在配置列表的最上方可以看到除了 public 之外,多了一個(gè)剛才創(chuàng)建的 Namepsace。

點(diǎn)擊test就可以切換到對(duì)應(yīng)的命名空間,然后新建相關(guān)的配置項(xiàng)。
最后,在客戶端應(yīng)用下填寫(xiě)對(duì)應(yīng)的 Namespace 參數(shù)即可。
# 對(duì)應(yīng)配置的命名空間 spring.cloud.nacos.config.namespace=0c85c5cf-4421-4839-9998-ace7d8ecf5a8
需要注意的是,這里填寫(xiě)不是命名空間的名稱,而是命名空間ID。
4.2、多文件加載介紹
在上文中我們介紹的都是單個(gè)配置文件的加載,而在實(shí)際的業(yè)務(wù)開(kāi)發(fā)中,我們常常會(huì)碰到多個(gè)配置文件一起加載的場(chǎng)景,例如加載 Redis、RabbitMQ 等配置資源。
下面我們一起來(lái)看看相關(guān)的實(shí)現(xiàn)方式。
4.2.1、多個(gè)配置加載介紹
對(duì)于多個(gè)配置的加載,我們只需要做以下兩步,就可以實(shí)現(xiàn)這個(gè)需求。
第一步:在 Nacos 中創(chuàng)建Data ID=redis.properties和Data ID=rabbitmq.properties的配置內(nèi)容。

第二步:在 Spring Cloud 應(yīng)用bootstrap.properties文件中,通過(guò)spring.cloud.nacos.config.extension-configs參數(shù)配置需要加載的文件,具體如下。
# 設(shè)置多文件加載,并支持動(dòng)態(tài)刷新 spring.cloud.nacos.config.extension-configs[0].data-id=redis.properties spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP spring.cloud.nacos.config.extension-configs[0].refresh=true spring.cloud.nacos.config.extension-configs[1].data-id=rabbitmq.properties spring.cloud.nacos.config.extension-configs[1].group=DEFAULT_GROUP spring.cloud.nacos.config.extension-configs[1].refresh=true
當(dāng)服務(wù)啟動(dòng)的時(shí)候,Nacos 客戶端會(huì)自動(dòng)從服務(wù)端獲取相關(guān)的配置資源加載到 Spring Boot 應(yīng)用中。
4.2.2、共享配置加載介紹
通過(guò)上面加載多個(gè)配置文件的例子,我們已經(jīng)可以實(shí)現(xiàn)不同的應(yīng)用共享配置的需求了。
對(duì)于共享配置使用,Nacos 還提供了另一種更便捷的配置方式,比如下面的配置與上面使用的多文件加載配置,作用是等價(jià)的。
# 設(shè)置多個(gè)共享配置文件加載,并支持動(dòng)態(tài)刷新 spring.cloud.nacos.config.shared-configs[0].data-id=redis.properties spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP spring.cloud.nacos.config.shared-configs[0].refresh=true spring.cloud.nacos.config.shared-configs[1].data-id=rabbitmq.properties spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP spring.cloud.nacos.config.shared-configs[1].refresh=true
4.2.3、配置加載的優(yōu)先級(jí)介紹
當(dāng)我們加載多個(gè)配置的時(shí)候,如果存在相同的 key,配置加載的優(yōu)先級(jí)是怎樣的呢?
Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關(guān)的配置,分別如下:
- A:通過(guò)
spring.cloud.nacos.config.shared-dataids定義的共享配置 - B:通過(guò)
spring.cloud.nacos.config.ext-config[n].data-id定義的擴(kuò)展配置 - C:通過(guò)內(nèi)部相關(guān)規(guī)則(
應(yīng)用名、應(yīng)用名+ Profile)生成的配置
當(dāng)三種方式同時(shí)存在的時(shí)候,他們的優(yōu)先級(jí)關(guān)系為A < B < C,也就是說(shuō)優(yōu)先級(jí)高的會(huì)覆蓋優(yōu)先級(jí)底的配置。
最后總結(jié)一下:
Nacos 是 Spring Cloud Alibaba 體系中最重要的組件之一,既可以用于服務(wù)注冊(cè)中心,也可以用于服務(wù)配置中心。
在微服務(wù)技術(shù)體系中,應(yīng)用非常廣泛,因此掌握 Nacos 相關(guān)技術(shù)的使用,對(duì)我們項(xiàng)目的開(kāi)發(fā)會(huì)有顯著的幫助。
五、實(shí)戰(zhàn)
1. 安裝與啟動(dòng) Nacos
下載 Nacos
從 Nacos 的 GitHub 倉(cāng)庫(kù)(https://github.com/alibaba/nacos/releases)下載適合你系統(tǒng)的版本,解壓下載好的壓縮包。
啟動(dòng) Nacos
- Windows 系統(tǒng):打開(kāi)命令提示符,進(jìn)入 Nacos 的
bin目錄,執(zhí)行以下命令啟動(dòng) Nacos:
startup.cmd -m standalone
- Linux/Mac 系統(tǒng):打開(kāi)終端,進(jìn)入 Nacos 的
bin目錄,執(zhí)行以下命令啟動(dòng) Nacos:
這里的 -m standalone 表示以單機(jī)模式啟動(dòng)。啟動(dòng)成功后,在瀏覽器中訪問(wèn) http://localhost:8848/nacos,使用默認(rèn)用戶名 nacos 和密碼 nacos 登錄 Nacos 控制臺(tái)。
2. 創(chuàng)建配置
登錄 Nacos 控制臺(tái)
打開(kāi)瀏覽器,訪問(wèn) http://localhost:8848/nacos,輸入用戶名 nacos 和密碼 nacos 登錄。
創(chuàng)建配置文件
在控制臺(tái)左側(cè)導(dǎo)航欄中選擇 “配置管理” -> “配置列表”,點(diǎn)擊 “+” 號(hào)創(chuàng)建新的配置。填寫(xiě)以下信息
- Data ID:配置文件的唯一標(biāo)識(shí),通常采用
應(yīng)用名.properties或應(yīng)用名.yml的格式,例如example-service.properties。 - Group:配置分組,默認(rèn)為
DEFAULT_GROUP。 - 配置格式:根據(jù)實(shí)際情況選擇
properties或yaml。 - 配置內(nèi)容:輸入具體的配置信息,例如在
example-service.properties中可以添加如下內(nèi)容:
properties
server.port=8081 spring.datasource.url=jdbc:mysql://localhost:3306/example_db spring.datasource.username=root spring.datasource.password=123456
3. 在微服務(wù)中集成 Nacos 配置中心
添加依賴
以 Spring Boot 項(xiàng)目為例,在 pom.xml 中添加 Nacos 配置中心的依賴:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>配置 Nacos 客戶端
在 src/main/resources 目錄下創(chuàng)建 bootstrap.properties 或 bootstrap.yml 文件,添加以下配置:
spring.application.name=example-service spring.cloud.nacos.config.server-addr=localhost:8848 spring.cloud.nacos.config.file-extension=properties
這里的 spring.application.name 要與在 Nacos 控制臺(tái)創(chuàng)建的配置文件的 Data ID 中的應(yīng)用名一致,spring.cloud.nacos.config.server-addr 是 Nacos 服務(wù)器的地址,spring.cloud.nacos.config.file-extension 是配置文件的格式。
獲取配置信息
在 Spring Boot 項(xiàng)目中,可以使用 @Value 注解或 @ConfigurationProperties 注解來(lái)獲取配置信息。
以下是使用 @Value 注解的示例:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/config")
public String getConfig() {
return "Server port: " + serverPort;
}
}4. 動(dòng)態(tài)刷新配置
開(kāi)啟動(dòng)態(tài)刷新
在需要?jiǎng)討B(tài)刷新配置的類上添加 @RefreshScope 注解,例如:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class ConfigController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/config")
public String getConfig() {
return "Server port: " + serverPort;
}
}測(cè)試動(dòng)態(tài)刷新
當(dāng)在 Nacos 控制臺(tái)修改配置信息并發(fā)布后,無(wú)需重啟微服務(wù),調(diào)用 /config 接口即可獲取到最新的配置信息。
5. 多環(huán)境配置管理
創(chuàng)建不同環(huán)境的配置文件
在 Nacos 控制臺(tái)分別創(chuàng)建不同環(huán)境(如開(kāi)發(fā)、測(cè)試、生產(chǎn))的配置文件,
例如 example-service-dev.properties、example-service-test.properties、example-service-prod.properties。
根據(jù)環(huán)境加載配置
在 bootstrap.properties 中添加 spring.profiles.active 屬性來(lái)指定當(dāng)前環(huán)境,例如:
spring.application.name=example-service spring.cloud.nacos.config.server-addr=localhost:8848 spring.cloud.nacos.config.file-extension=properties spring.profiles.active=dev
這樣,微服務(wù)將加載 example-service-dev.properties 中的配置信息。
通過(guò)以上步驟,你就可以使用 Nacos 打造一個(gè)功能完善的微服務(wù)配置中心,實(shí)現(xiàn)配置的集中管理和動(dòng)態(tài)刷新。
六、總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java連接HBase,連接不上報(bào)錯(cuò)can not resolve問(wèn)題及解決
這篇文章主要介紹了java連接HBase,連接不上報(bào)錯(cuò)can not resolve問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Java實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消的7種方案
在電商、外賣、票務(wù)等系統(tǒng)中,訂單超時(shí)未支付自動(dòng)取消是一個(gè)常見(jiàn)的需求,這個(gè)功能乍一看很簡(jiǎn)單,甚至很多初學(xué)者會(huì)覺(jué)得:"不就是加個(gè)定時(shí)器么?" 但真到了實(shí)際工作中,細(xì)節(jié)的復(fù)雜程度往往會(huì)超乎預(yù)期,本文給大家介紹了Java實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消的7種方案2024-12-12
Java使用quartz實(shí)現(xiàn)定時(shí)任務(wù)示例詳解
這篇文章主要為大家介紹了Java使用quartz實(shí)現(xiàn)定時(shí)任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
SpringBoot定制JSON響應(yīng)數(shù)據(jù)返回的示例代碼
@JsonView 是 Jackson 庫(kù)中的一個(gè)注解,它允許你定義哪些屬性應(yīng)該被序列化到 JSON 中,基于不同的“視圖”或“配置”,在本文中,通過(guò)了解@JsonView,你將能夠更好地掌握如何在Spring Boot應(yīng)用中定制JSON數(shù)據(jù)的輸出,需要的朋友可以參考下2024-05-05
Spring的IOC容器實(shí)例化bean的方式總結(jié)
IOC容器實(shí)例化bean的三種方式:構(gòu)造方法、靜態(tài)工廠、實(shí)例工廠,本文將通過(guò)代碼示例給大家詳細(xì)講解一下這三種方式,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
Java實(shí)現(xiàn)修改PDF文件MD5值且保持內(nèi)容不變
在某些場(chǎng)景中,我們可能需要改變PDF文件的MD5值,而又不希望改變文件的可視內(nèi)容,本文詳細(xì)介紹了如何實(shí)現(xiàn)這一目標(biāo),并提供了具體的Java實(shí)現(xiàn)示例,需要的可以參考下2023-10-10
MyBatis動(dòng)態(tài)SQL標(biāo)簽的用法詳解
這篇文章主要介紹了MyBatis動(dòng)態(tài)SQL標(biāo)簽的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
SpringShell命令行之交互式Shell應(yīng)用開(kāi)發(fā)方式
本文將深入探討Spring Shell的核心特性、實(shí)現(xiàn)方式及應(yīng)用場(chǎng)景,幫助開(kāi)發(fā)者掌握這一強(qiáng)大工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

