作用:

  1. 实现配置热更新
  2. 实现网关配置热部署

配置模板

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${db.gulimall.host:192.168.229.128}:${db.gulimall.port:3306}/{$db.gulimall.database:my_db}
username: ${db.gulimall.user:root}
password: ${db.gulimall.password:dzjdzj}

${导入时需要额外在配置文件声明的内容:没有声明的话,填值的默认内容}

通常共享的配置为shared-开头

实现从nacos导入配置

使用springcloud与springboot的启动流程有所不同,所以cloud统一结合了一下

不一定非要bootstrap,使用application.properties也可以,关键在于这个流程中进行的顺序(只要别配置nacos到yml文件即可)

导入依赖

<!-- nacos配置管理依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.5.0</version>
</dependency> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.3</version>
</dependency>

配置模板

spring:
application:
name: hhhh
profiles:
active: dev #为什么这个和application name也要放这里?下面有填坑
cloud:
nacos:
config:
shared-configs:
- dataId: shared-jdbc.yaml
file-extension: yaml
server-addr: 192.168.229.128:8848

关于dataId,其实可以配置的不止dataId,共有以下三个

private String dataId;
private String group;
private boolean refresh;

配置热更新

之前配置的那些mybatis,mysql都不支持热更新

这是相当合理的行为:

  1. springboot会生成不少组件,如果这些支持热更新,那么需要他们把对应bean的属性更改,但是他们并没有这样
  2. 通常这些东西实现热更新是高风险行为,如果真该热更新,应该停服重启

真正该热更新的是我们业务中的需要热更新的业务

如:购物车的存储上限

需要配置一个配置类

@Data
@Component
@ConfigurationProperties(prefix="db.gulimall")
public class CartProperties{
private int maxSize;//最好与配置文件同名,大概通过get/set设置,这是规范
}

填坑为什么还要application name 和 profile active

因为在连上nacos后,启动项目会自动找application name-active.yaml和application name.yaml来读取配置

所以nacos配置某服务特有配置文件时

要按照对应的规格application name-profile active.yaml

动态路由

正常情况下,路由不需要实现热更新,如果要实现,由于是springcloud的实现,所以我们需要额外处理业务

注意点

  1. nacos关于网关的配置只支持JSON形式
[
{
"id":"item",
"predicates":[{
"name":"Path",
"args":{"genkey 0":"/items/**","genkey 1":"search/**"}
}],
"filters":[],
"uri":"lb;//item-service"
},
]
  1. 使用cloud route更新的RouteDefinitionWriter写入以及删除机制(注入RouteDefinitionWriter)

    1. 他插入的模式不太一样,需要用到Mono,Mono类似一个容器,然后just是发射的功能/意思,subscribe是订阅
  2. 在更新时,要先删除旧有的routeDifinition
  3. 需要使用到NacosConfigManager组件来定义监听器
  4. ctrl+shift+U:转为大写
  5. 还要@PostConstruct在组件注入后再调用该方法生成监听器

模板:

@Component
@RequiredArgsConstructor
public class RouteConfigLoader {
private final NacosConfigManager configManager;
private final static String DATA_ID="gateway.json";
private final static String GROUP="DEFAULT";
private final RouteDefinitionWriter writer;
private Set<String> oldIds=new HashSet<>();
@PostConstruct
public void routeInit() throws NacosException {
String configInfo = configManager.getConfigService().getConfigAndSignListener(DATA_ID, GROUP, 5000, new Listener() { @Override
public Executor getExecutor() {
return Executors.newSingleThreadExecutor();
} @Override
public void receiveConfigInfo(String configInfo) {
updateRoutes(configInfo);
}
});
updateRoutes(configInfo);
} private void updateRoutes(String configInfo) {
List<RouteDefinition> routeDefinitions = JSONUtil.toList(configInfo, RouteDefinition.class);
//删除旧有的routes
for (String oldId : oldIds) {
writer.delete(Mono.just(oldId)).subscribe();//删除
}
//新增目前的routes
oldIds.clear();
for (RouteDefinition routeDefinition : routeDefinitions) {
writer.save(Mono.just(routeDefinition)).subscribe();//添加进去
oldIds.add(routeDefinition.getId());
}
}
}

spring-cloud 配置管理的更多相关文章

  1. Spring Cloud Netflix项目进入维护模式

    任何项目都有其生命周期,Spring Could Netflix也不例外,官宣已进入维护模式,如果在新项目开始考虑技术选型时要考虑到这点风险,并考虑绕道的可能性. 原创: itmuch  IT牧场 这 ...

  2. 大白话入门 Spring Cloud

    首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟. 什么是Spring cloud 构建分布式系统不需要复杂和容易出错.Spring Cloud 为最常见 ...

  3. 使用spring cloud实现分布式配置管理

    <7天学会spring cloud系列>之创建配置管理服务器及实现分布式配置管理应用. 本文涉及到的项目: 开源项目:http://git.oschina.net/zhou666/spri ...

  4. Spring Cloud 入门教程(二): 配置管理

    使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring ...

  5. Spring Cloud Alibaba | Nacos配置管理

    目录 Spring Cloud Alibaba | Nacos配置管理 1. pom.xml 项目依赖 2. 在 bootstrap.properties 中配置 Nacos server 的地址和应 ...

  6. Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理

    随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...

  7. Spring Cloud Alibaba 实战(十二) - Nacos配置管理

    本章主要内容是:使用Nacos管理配置以及实现配置管理的原因,配置如何管理以及动态刷新和最佳实现总结,最后是Nacos配置刷新原理解读 该技术类似于Spring Cloud Config 1 配置管理 ...

  8. Spring Cloud Alibaba学习笔记(22) - Nacos配置管理

    目前业界流行的统一配置管理中心组件有Spring Cloud Config.Spring Cloud Alibaba的Nacos及携程开源的Apollo,本文将介绍Nacos作为统一配置管理中心的使用 ...

  9. Spring Cloud Config 分布式配置管理 5.3

    Spring Cloud Config简介 在传统的单体式应用系统中,我们通常会将配置文件和代码放在一起,但随着系统越来越大,需要实现的功能越来越多时,我们又不得不将系统升级为分布式系统,同时也会将系 ...

  10. Spring Cloud Alibaba 使用Nacos作为配置管理中心

    为什么需要配置中心? 动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息. 动态配置中心可以实现配置更新时无需重新部署 ...

随机推荐

  1. 9、SpringBoot-mybatis-druid多源数据多源数据

    系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...

  2. 《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能

    写程序最主要的目标就是使它在所有可能的情况下都正确工作.一个运行得很快但是给出错误结果的程序没有任何用处.程序员必须写出清晰简洁的代码,这样做不仅是为了自己能够看懂代码,也是为了在检査代码和今后需要修 ...

  3. S3C2440移植uboot之编译烧写uboot

    目录 移植环境 获取uboot 更新交叉编译工具 配置环境变量 移植环境 主 机:VMWare--ubuntu16.04 开发板:S3C2440 编译器:arm-linux-gcc-4.3.2.tgz ...

  4. vue异步组件

  5. 深入理解Kafka核心设计及原理(六):Controller选举机制,分区副本leader选举机制,再均衡机制

    转载请注明出处:https://www.cnblogs.com/zjdxr-up/p/15026824.html 目录: 6.1.Kafka核心总控制器Controller 6.2.Controlle ...

  6. Advanced .Net Debugging 1:你必须知道的调试工具

    一.简介    我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用.他们采取的分析方法通常包括:输出更多的调试信息,或者做一些临时性的代码审查.这里的临时性是指,通过 ...

  7. [转帖]MySQL 官方出品,比 mydumper 更快的多线程逻辑备份工具-MySQL Shell Dump & Load

    MySQL 官方出品,比 mydumper 更快的多线程逻辑备份工具-MySQL Shell Dump & Load - 知乎 (zhihu.com) ​ 目录 收起 什么是 MySQL Sh ...

  8. [转帖]命令行非明文密码连接 TiDB

    https://tidb.net/blog/6794a34b#%E6%96%B9%E5%BC%8F%E4%B8%80%EF%BC%9A%E5%91%BD%E4%BB%A4%E8%A1%8C%E8%BE ...

  9. [转帖] q命令-用SQL分析文本文件

    https://www.cnblogs.com/codelogs/p/16060830.html 简介# 在Linux上分析文本文件时,一般会使用到grep.sed.awk.sort.uniq等命令, ...

  10. 【转帖】68.记忆集(remembered set)和写屏障(write barrier)

    目录 1.记忆集(`remembered set`) 1.记忆集(remembered set) 问题:G1将堆区划分成多个region,一个region不可能是独立的,它其中存储的对象可能被其他任意 ...