學習 spring-cloud-aibaba第八篇,Nacos配置文件管理


特別聲明:整理自慕課網大目師兄的微服務視頻,鏈接:https://coding.imooc.com/learn/list/358.html

1.配置文件管理可以幫我們做什麼?

  • 可以做到不同環境使用不同的配置
  • 動態刷新,修改配置屬性不用重啓應用
  • 共享配置文件

2.整合Nacos config

在學習spring-cloud-aibaba第二篇,我們使用Nacos組件實現了服務的註冊和發現,現在我們要使用它的配置文件管理這部分功能

2.1 加依賴

因爲spring alibaba的版本還是0.9.0.RELEASE,所以groupId是這個,以後改版本了,這個groupId是會變的

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

2.2 加註解

沒有註解,過

2.3 寫配置

2.3.1 代碼端的配置

  • resources目錄下創建bootstrap.yml必須是這個名字,潛規則
spring:
  cloud:
    nacos:
      config:
        # 指定nacos 控制檯地址
        server-addr: 118.31.11.178:8848
        file-extension: yaml
  application:
    name: user-center
  profiles:
    active: dev

2.3.2 Nacos控制檯的配置

配置列表---->新增配置

  • Data ID
    填寫規則:bootstrap.yml裏的 application.name + profiles.active + file-extension
    潛規則,要遵守
  • Group
    使用默認值就行了,不用動它
  • 描述
    自由發揮
  • 配置格式
    目前只支持YAMLProperties,選擇和Data ID後綴匹配的格式
  • 配置
    寫具體的配置內容就行了,YAML格式的
jwt.secret: 1234567890
jwt.expirationTimeInSecond: 3600

在這裏插入圖片描述

2.4 測試

屬性承載類JwtConfig.java

@Component
@Data
public class JwtConfig {

    /**
     * token 密鑰
     */
    @Value("${jwt.secret}")
    public String secret;

    /**
     * token 失效時間,單位秒
     */
    @Value("${jwt.expirationTimeInSecond}")
    public String expirationTimeInSecond;

}

Controller:

@GetMapping("/getMyProperties")
    public Object testProperties() {
        return ResponseVO.success(jwtConfig);
    }

http://localhost:8082/member/getMyProperties,成功讀取到Nacos上的配置
在這裏插入圖片描述

3.Nacos config的一些實用特性

3.1 動態刷新

代碼加上@RefreshScope註解,位置在裝載配置屬性的類上,我這裏是JwtConfig.java,也有可能是Controller或者Service之類的

  • Controller的使用演示,jwtSecret就是配置的屬性
@RestController
@Slf4j
@RequestMapping("/member")
@RefreshScope
public class MemberController {

    @Autowired
    private MemberService memberService;

    @Autowired
    private WXConfig wxConfig;

    @Autowired
    private JwtConfig jwtConfig;

    @Value("${jwt.secret}")
    private String jwtSecret;
    
    @GetMapping("/getMyProperties")
    public Object testProperties() {
        return ResponseVO.success(jwtConfig.toString() + " Controller的屬性 jwtSecret=" + jwtSecret);
    }
  • JwtConfig.java的使用演示
@Component
@Data
@RefreshScope
public class JwtConfig {

    /**
     * token 密鑰
     */
    @Value("${jwt.secret}")
    public String secret;

    /**
     * token 失效時間,單位秒
     */
    @Value("${jwt.expirationTimeInSecond}")
    public String expirationTimeInSecond;

}

3.2 配置回滾

3.3 配置共享

配置共享分爲兩部分,1.單服務不同環境配置共享;2.不同服務配置共享

3.3.1 單服務不同環境配置共享

Nacos上新建user-center.yaml,這個文件裏的配置就是公用配置,爲什麼名字要取這個?啓動日誌裏就有
在這裏插入圖片描述

  • 新建user-center.yaml
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 更改bootstrap.yml裏的profiles.active=prod
    Naocs裏沒有對應prod的配置文件,只能讀取公共配置文件user-center.yaml
    如果存在user-center-prod.yaml,優先級要高於user-center.yaml
spring:
  cloud:
    nacos:
      config:
        # 指定nacos 控制檯地址
        server-addr: 118.31.11.178:8848
        file-extension: yaml
  application:
    name: user-center
  profiles:
#    active: dev
    active: prod

3.3.2 不同服務的配置共享

有兩種實現方式

3.3.2.1 方式一 shared-dataids

小程序參數和jwt Token的配置是多個應用共用的,所以我把它們提出來

spring:
  cloud:
    nacos:
      config:
        # 指定nacos 控制檯地址
        server-addr: 118.31.11.178:8848
        file-extension: yaml
        # 不同應用共享配置文件的 Data ID,多個使用,分割
        # 越靠後,優先級越高 jwt_common.yaml > wx_common.yaml
        # .yaml 不能少,只支持yaml/properties
        shared-dataids: wx_common.yaml,jwt_common.yaml
        # 支持動態刷新的共享配置文件,多個使用,分割
        refreshable-dataids: wx_common.yaml,jwt_common.yaml
  application:
    name: user-center
  profiles:
#    active: dev
    active: prod

在這裏插入圖片描述
重啓user-center
user-center:http://localhost:8082/member/getMyProperties,讀取到了jwt-common.yaml
在這裏插入圖片描述
content-center,也新建bootstrap.yml

spring:
  cloud:
    nacos:
      config:
        # 指定nacos 控制檯地址
        server-addr: 118.31.11.178:8848
        file-extension: yaml
        # 不同應用共享配置文件的 Data ID,多個使用,分割
        # 越靠後,優先級越高
        # .yaml 不能少,只支持yaml/properties
        shared-dataids: jwt_common.yaml
        # 支持動態刷新的共享配置文件,多個使用,分割
        refreshable-dataids: jwt_common.yaml
  application:
    name: content-center

content-centerhttp://localhost:8081/getMyProperties,也讀取到了,這就體現了配置的共享
在這裏插入圖片描述

3.3.2.2 方式二 ext-config

這種方式我就不測試了

spring:
  cloud:
    nacos:
      config:
        # 指定nacos 控制檯地址
        server-addr: 118.31.11.178:8848
        file-extension: yaml
        ext-config:
          - data-id: wx_common.yaml
            group: DEFAULT_GROUP
            refresh: true
          - data-id: jwt_common.yaml
              group: DEFAULT_GROUP
              refresh: true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章