springboot整合nacos的入門Demo

Nacos介紹

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母簡稱,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。

Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。

Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”爲中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。


官方文檔

https://nacos.io/zh-cn/docs/what-is-nacos.html


Nacos安裝部署

環境依賴:

  • JDK1.8+

下載地址
官網地址:
https://github.com/alibaba/nacos/releases
百度網盤地址:
鏈接:https://pan.baidu.com/s/1fTmvE9M0C_Ep_EJxQR4FPg
提取碼:iscm

Nacos的安裝部署非常簡單,如果只是作爲測試學習,那麼只需要將下載下來的Nacos進行解壓,然後到bin目錄,根據當前系統運行對應的startup.cmd即可。


注:如果nacos的版本在2.2.0+以上的版本時,必須執行此變更,否則無法啓動。
修改conf目錄下的application.properties文件。
設置其中的nacos.core.auth.plugin.nacos.token.secret.key值,詳情可查看鑑權-自定義密鑰.




Nacos支持三種部署模式

  • 單機模式 - 用於測試和單機試用。

  • 集羣模式 - 用於生產環境,確保高可用。

  • 多集羣模式 - 用於多數據中心場景。


將下載下來的nacos包進行解壓,如果是window系統,打開bin文件夾,雙擊運行startup.cmd即可,linux也是一樣,執行 sh startup.sh 命令。

默認運行的是集羣模式,如果不想使用集羣,只想用單機模式,那麼需要再運行的時候添加如下命令.

window:

startup.cmd -m standalone

linux:

startup.sh -m standalone

如果不想每次運行添加上述命令,那麼可以修改startup.cmd或sh startup.sh腳本,修改爲set MODE="standalone",示例圖如下:

在這裏插入圖片描述

配置完畢之後,執行啓動腳本,啓動Nacos,默認地址爲http://localhost:8848/nacos,賬號和密碼爲nacos/nacos,如果不想用這個,可以在登錄之後的權限控制->用戶列表菜單中進行修改。

示例圖如下:

在這裏插入圖片描述

Springboot整合Nacos示例

環境依賴

  • JDK1.8+
  • Springboot2.x
  • nacos2.x

官方的版本對應建議配置:

版本 0.2.x.RELEASE 對應的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 對應的是 Spring Boot 1.x 版本。

但是爲了防止版本問題,強烈建議Springboot的版本和nacos的版本完全一致。

maven倉庫配置如下;


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

	<dependencies>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- Spring Boot Test 依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		
		 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>2.2.1.RELEASE</version>
		</dependency>


		<!--日誌 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j}</version>
		</dependency>


		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback}</version>
		</dependency>

		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>${logback}</version>
		</dependency>



	</dependencies>


注:如果Springboot是2.4以上的版本,maven倉庫需要額外增加如下依賴:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
      </dependency>

一個簡單的示例


首先創建一個配置文件,配置文件用bootstrap.properties,配置信息如下:


spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
server.port=8299
spring.application.name=springboot-nacos
spring.profiles.active=dev


# nacos配置
## Nacos服務自動註冊
nacos.discovery.autoRegister=true
## Nacos服務註冊中心地址
spring.cloud.nacos.discovery.server-addr= http://127.0.0.1:8848
## Nacos服務配置中心地址
spring.cloud.nacos.config.server-addr= http://127.0.0.1:8848






然後再來創建一個基本的啓動類


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Author pancm
 * @Description springboot集成nacos配置中心
 * @Date  2024/1/26
 * @Param
 * @return
 **/
@SpringBootApplication
@EnableDiscoveryClient
public class App 
{
	private static final Logger logger = LoggerFactory.getLogger(App.class);
    public static void main( String[] args )
    {
    	// 啓動嵌入式的 Tomcat 並初始化 Spring 環境及其各 Spring 組件
		SpringApplication.run(App.class, args);
		logger.info("程序啓動成功!");
    }
}

這裏我們還需要對配置是否生效進行測試,這裏就創建一個Controller,然後調用接口的時候返回配置信息。@RefreshScope註解是可以進行動態刷新。


import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import static org.springframework.web.bind.annotation.RequestMethod.GET;

/**
 * @Author pancm
 * @Description 官方示例文檔
 * @Date  2024/1/26
 * @Param
 * @return
 **/
@RestController
@RequestMapping("config")
@RefreshScope
public class ConfigController {

  

    @Value("${pcm.name:pcm-1001}")
    private String name;

    @RequestMapping(value = "/getName", method = GET)
    public String getName() {
        return name;
    }

}

:這裏爲了防止啓動失敗,添加配置的時候設置一個默認值。


然後運行App,啓動成功,日誌信息如下:

在這裏插入圖片描述

首先我們調用接口來查看當前的配置信息,輸入http://localhost:8299/config/getName,返回示例圖如下,可以看到是可以獲取默認的配置。
在這裏插入圖片描述

然後我們在Nacos的頁面上面添加一個pcm.name的配置,並且更改配置的值,這裏我們更改爲pcm-2001,然後點擊發布。
在這裏插入圖片描述

這裏需要注意一下DataId的名稱命名規則,默認的情況下dataId=prefix.file-extension,其中profix默認爲${spring.application.name}file-extension默認爲properties。
如果指定了spring.profile.active,那麼就會變成dataId=prefix-spring.profile.active.file-extension
比如上述的項目名稱爲springboot-nacos,配置文件的後綴是properties,那麼DataId就是springboot-nacos.properties,指定了spring.profile.active=dev,那麼DataId就是springboot-nacos-dev.properties
但是我指定了spring.profile.active=dev,爲什麼DataId是springboot-nacos.properties
也可以呢?因爲這裏還涉及到一個優先級的問題。

DataId有三個配置規則


  1. dataId =prefix
  2. dataId =prefix.file-extension
  3. dataId =prefix-spring.profile.active.file-extension

他們的優先級是按照匹配的精準度來進行了,也就是如果配置多個dataId的話,那麼他會匹配最相近的,也就是匹配優先級是3>2>1,這裏我們也可以通過啓動中的日誌進行查看。

在這裏插入圖片描述

發佈成功之後我們可以看到日誌也進行了刷新。
在這裏插入圖片描述

然後我們再進行訪問http://localhost:8299/config/getName。通過下面的示例圖我們可以看到配置已經刷新爲我們設置的最新配置了。

在這裏插入圖片描述

Nacos配置管理


上述示例中,我們已經完成了一個簡單的獲取Nacos中的配置示例,並且可以實現配置刷新。但是如果我們有多個服務使用的話,那麼我們需要對配置進行區分,不建議都是用默認的public空間,因此我們還需要創建新的命名空間,如果還有分組要求(一般就是環境區分,dev、test、prod),那麼我們還可以再進行創建配置時指定好group。

在nacos的命名空間菜單中,我們創建一個新的命名空間,其中命名空間ID這個保證唯一就行,默認可以不填寫。

在這裏插入圖片描述

創建成功之後,我們在來創建一個新的配置並且指定分組爲dev,方便我們管理。此時裏面的配置內容爲pcm.name =pcm-dev

在這裏插入圖片描述

創建完成之後,我們在Springboot的項目配置文件中新增如下配置:

## nacos命名空間id
spring.cloud.nacos.config.namespace= pcm-namespace--id
## 對應的分組名稱
spring.cloud.nacos.config.group= dev
## 配置文件後綴名,也可以不配置,默認爲properties
spring.cloud.nacos.config.fileExtension= properties

重新啓動項目,查看日子,我們可以看到已經配置成功了。


在這裏插入圖片描述

然後我們在重新啓動項目,http://localhost:8299/config/getName。通過下面的示例圖我們可以看到配置已經是設置的命名空間配置了。

在這裏插入圖片描述

多配置文件


在使用Nacos中,有時配置太多,不想放在一個配置文件中,此時就可以使用多個配置文件來進行區分管理。


在bootstrap.properties配置文件中新增如下配置,如果後續還有新的配置,參考下列配置,遞增extension-configs[0]的數值即可,比如在新增一個配置文件,那麼就是extension-configs[1] = xxx.properties 這樣配置就可以了。

# 新增額外配置
##額外的第一個配置文件的dataId
spring.cloud.nacos.config.extension-configs[0].data-id=pcm-dev.properties
##額外的第一個配置文件的分組
spring.cloud.nacos.config.extension-configs[0].group=dev

在nacos中新增改配置文件,然後這裏添加一個新的配置pcm.age=28.

在這裏插入圖片描述

然後再ConfigController代碼中新增如下接口,添加完成之後重啓項目。

    @Value("${pcm.age:18}")
    private String age;


    @RequestMapping(value = "/getAge", method = GET)
    public String getAge() {
        return age;
    }

訪問http://localhost:8299/config/getAge。通過下面的示例圖我們可以看到配置已經生生效了。

在這裏插入圖片描述

其他

關於SpringBoot整合nacos的demo簡單講解的文章就講解到這裏了,如有不妥,歡迎指正!

項目地址

SpringBoot 的nacos的項目工程地址:
https://github.com/xuwujing/springBoot-study/tree/master/springboot-nacos

SpringBoot整個集合的地址:
https://github.com/xuwujing/springBoot-study

SpringBoot整合系列的文章

音樂推薦

翩若驚鴻,婉若游龍,榮曜秋菊,華茂春松。彷彿兮若輕雲之蔽月,飄飄兮若流風之迴雪。遠而望之,皎若太陽昇朝霞;迫而察之,灼若芙蕖出淥波。--網易雲網友評論

原創不易,如果感覺不錯,希望給個推薦!您的支持是我寫作的最大動力!
版權聲明:
作者:虛無境
博客園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm    
個人博客出處:http://www.panchengming.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章