SpringCloud集成Nacos實現(xiàn)配置管理

SpringCloud集成Naocs

前情內容

1. 簡介

對Nacos在CentOS中的安裝還了解的話,請參考CentOS環(huán)境下安裝Nacos。

在實際開發(fā)和運維支撐過程中,都遇到對服務中配置文件的管理,如果需要管理的配置文件數(shù)量較少,帶來相關工作不是很多,當我們面對成百上千個配置文件需要管理,這想想都讓人頭疼,如果我們稍有不慎將文件改錯、漏改以及配置不生效,瞬間讓人懷疑人生。

所以面對此類場景,我們引入Nacos,在Nacos控制臺上我們可以對健康狀態(tài)管理,對服務治理,減輕分布式配置管理等方面的管控能力,以便進一步幫助用戶降低管理微服務應用架構的成本。

2. 新建配置

2.1. data id規(guī)則

Nacos管理

打開Nacos管理頁面,打開:配置管理=>配置列表,新建配置,對于Data ID我們約定命名規(guī)則是:

${prefix}-${spring.profile.active}.${file-extension}

prefix 默認是spring.application.name,在SpringCloud中我們可以通過spring.cloud.nacos.config.prefix來配置

spring.profile.active當前環(huán)境對應的profile,通過spring.profile.active來配置

file-exetension為配置內容的數(shù)據(jù)格式,可以通過spring.cloud.nacos.config.file-extension來配置。截止當前只支持propertiesyaml類型

當spring.profile.active未配置時,對應的連接符 - 也將不存在,dataId 的拼接格式變成 {prefix}.{file-extension}

2.2. 創(chuàng)建配置文件

bootstrap.yml/bootstrap.properties,而不是application.yml/application.properties,如果了解Springboot應該都知道,這bootstrap和application在項目啟動中,加載順序有先后的,bootstrap的優(yōu)先級是高于application。

3. 添加依賴

因為Springboot最新2.1.X版本集成spring-cloud-alibaba-dependencies會有一些問題,所以SpringBoot版本需要降級到2.0.X,這也是個坑呀,折騰了好久。經(jīng)過查閱一些資料,穩(wěn)定版本的列表如下

Spring Cloud Version Spring Cloud Alibaba Version Spring Boot Version
Spring Cloud Greenwich 2.1.1.RELEASE 2.1.X.RELEASE
Spring Cloud Finchley 2.0.1.RELEASE 2.0.X.RELEASE
Spring Cloud Edgware 1.5.1.RELEASE 1.5.X.RELEASE

Spring Cloud Alibaba,包含了它所使用的所有依賴的版本。版本之間的依賴列表

  • Spring Cloud Greenwich

如果需要使用Spring Cloud Greenwich版本,在POM中的<dependencyManagement> 添加

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.1.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  • Spring Cloud Finchley

如果需要使用Spring Cloud Finchley版本,在POM中的<dependencyManagement> 添加

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.0.1.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  • Spring Cloud Edgware

如果需要使用Spring Cloud Edgware版本,在POM中的<dependencyManagement> 添加

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>1.5.1.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

3.1. 父級依賴

<properties>
    <java.version>1.8</java.version>
    <spring-boot.version>2.0.4.RELEASE</spring-boot.version>
    <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    <nacos.version>0.2.2.RELEASE</nacos.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>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${nacos.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3.2. 依賴

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

4. resource文件

4.1. bootstrap.properties

由于bootstrap.properties在啟動優(yōu)先級高,所以將Nacos配置信息寫這里。

spring.application.name=cofig-nacos
spring.profiles.active=dev
spring.cloud.nacos.config.group=CLOUD_GROUP
spring.cloud.nacos.config.server-addr=192.168.147.132:8848
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=yml
  • spring.cloud.nacos.config.server-addr:IP:PORT,生產(chǎn)環(huán)境這個應該是代理IP或者nacos的域名
  • spring.cloud.nacos.config.group:指定你設置的,默認為**
    DEFAULT_GROUP**

4.2. application.yml

server:
  port: 9002

# 5. mybatis配置
mybatis:
  mapperLocations: classpath:mapper/**/*.xml

6. 案例

為更好演示Nacos配置中心的效果,我這里將數(shù)據(jù)庫配置都寫在Nacos中,項目啟動過程中自動獲取配置中心的屬性。

  • Nacos控制臺配置
Nacos新增DataID等信息
spring: 
    datasource: 
        name: mysql
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
        username: root
        password: 123456
        druid:
            initial-size: 5
            min-idle: 5
            max-active: 20
            max-wait: 30000
            ##配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
            time-between-eviction-runs-millis: 2000
            ## 配置一個連接在池中最小生存的時間,單位是毫秒
            min-evictable-idle-time-millis: 300000
            max-evictable-idle-time-millis: 600000
            remove-abandoned: true
            remove-abandoned-timeout: 180
            log-abandoned: false
            validation-query: select 1
            test-while-idle: true
            test-on-borrow: true
            test-on-return: true
            keep-alive: true
            phy-timeout-millis: 500
            pool-prepared-statements: false
            max-pool-prepared-statement-per-connection-size: 20
            connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=6000
page:
    pageNum: 0
    pageSize: 20
  • 啟動類

@RefreshScope實現(xiàn)配置自動更新

@RefreshScope
@MapperScan(basePackages = {"xyz.wongs.weathertop.**.mapper"})
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
public class CloudConfigNacosApp {
    public static void main(String[] args) {
        SpringApplication.run(CloudConfigNacosApp.class,args);
    }

}

7.Endpoint 信息查看

Springboot本身支持Endpoint,而Nacos Config同樣也可以使用Endpoint來暴露信息。
在maven依賴中添加 spring-boot-starter-actuator依賴,并在配置中允許 Endpoints的訪問。

  • Spring Boot 1.x 中添加配置 management.security.enabled=false
  • Spring Boot 2.x 中添加配置 management.endpoints.web.exposure.include=*
Spring Boot 1.x 可以通過訪問 http://localhost:9001/nacos_config來查看Nacos Endpoint 的信息。

Spring Boot 2.x 可以通過訪問http://localhost:9001/actuator/nacos-config來訪問。
查看Endpoint

8. 源碼

Github演示源碼 ,記得給Star

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容