学习 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
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值