初识微服务-nacos配置中心

配置中心

概述

配置中心是微服务中不可或缺的组件,因为如果没有配置中心,那么各个微服务的的配置信息无法得到统一和管理,会变得冗余。

:::color4
配置中心是用于管理应用程序配置信息的工具

  • 集中管理配置:解决微服务架构下配置分散和冗余问题,将原本分散在各个服务节点的配置信息集中存储与管理 ,便于统一维护和管理,避免手动配置导致的不统一和不便。
  • 贯穿应用生命周期:应用启动和运行时,都需读取配置信息,配置中心提供配置读取功能,应用在启动时依配置初始化,运行中依配置调整行为。
  • 支持动态更新:主流配置中心如 Spring Cloud Config、Apollo、Nacos 等,支持配置实时推送、版本管理、配置回滚等功能,可在不重启应用的情况下动态更新配置,提升运维效率和系统灵活性。
  • 适配多种环境:应用在开发、测试、生产等不同环境,以及不同集群中,配置需求不同,配置中心可进行完善的环境、集群配置管理,让同一程序在不同环境下按需加载配置。
  • 多语言和多部署方式支持: 满足不同技术栈和部署场景需求,主流配置中心大多支持多语言,且提供单机和分布式等多种部署方式。

:::

Nacos

安装Nacos

注意:Nacos 会通过心跳机制来检测服务实例的健康状态。当一个服务实例注册到 Nacos 后,该实例会定期向 Nacos Server 发送心跳包 ,以表明自己处于存活状态。如果 Nacos Server 在一定时间内没有收到某个服务实例的心跳(即心跳超时),就会将这个服务实例从可用实例列表中剔除,这样其他服务在进行服务发现时,就不会获取到这个已被剔除的不健康实例,从而避免调用失败。

配置外部数据库连接

1.在本地mysql中,执行nacos中的sql文件(nacos-mysql.sql)先创建nacao表

2.再将nacos中的application.properties中的msyql连接改为本地的账号、密码等

3.重启nacos(如果成功了会出现use external …)

【注意:此时的数据库是空的,并不会将之前nacos中的数据迁移过来,所以建议在最开始就进行外部数据库连接,如果想要迁移,可以先登录旧的nacos中进行导出,然后在新的nacos中进行导入即可】

配置相关理论介绍

  1. Namespace(命名空间): Nacos 的全局资源隔离机制,通俗理解为 “不同环境的独立容器”,例如用不同 Namespace 隔离开发、测试、生产环境的服务和配置,确保环境间互不干扰。
    1. namespace= online、preonline、test、dev 等不同的隔离环境
  2. Group(分组):同一命名空间内的资源归类方式,通俗理解为 “同一环境里的文件夹”,例如在生产环境 Namespace 中,用不同 Group 区分订单服务、支付服务的配置,方便分类管理。
  3. Data ID:配置文件的唯一标识(里面的内容是具体的配置),通俗理解为 “文件夹里的具体配置文件”,例如订单服务 Group 中的<font style="color:rgb(0, 0, 0);">order-service-dev.properties</font>,就是一个包含该服务所有配置的 Data ID。

Nacos的操作与使用

基于SpringCloudAlibaba的配置读取

1️⃣在yaml中填写相关配置
  • 该项目的主配置为config1,然后可以导入其他的配置(利用ext或者shared-dataids导入),并且这些配置都在namespace为400e0e05-e848-4d2d-a2f6-b6fba1209dd5的空间内
  • ext和shared-dataids的区别是ext可以指定分组,但shared-dataids只能使用默认的分组DEFAULT_GROUP
  • ext和shared-dataids的refresh都很重要,开启后可以支持配置信息的动态刷新(即会实时改变)
# 服务器配置
server:port: 9002  # 应用启动的端口号# Nacos配置说明:
# 配置文件的唯一标识由三部分组成:
# 命名空间(namespace) + 分组(group) + 数据ID(dataId)
spring:application:name: config1  # 应用名称,会作为默认dataId的一部分(默认格式:${name}-${profile}.${extension})cloud:nacos:config:server-addr: 127.0.0.1:8848  # Nacos服务器地址# server-addr: 127.0.0.1:8860,127.0.0.1:8861,127.0.0.1:8862  # 集群地址(注释掉的备用配置)file-extension: yaml  # 配置文件的格式(默认是properties)namespace: 400e0e05-e848-4d2d-a2f6-b6fba1209dd5  # 命名空间ID(用于环境隔离)group: DEFAULT_GROUP  # 默认分组(用于配置隔离)# 方式1:通过shared-dataids加载多个配置文件(注释掉的备用配置)# shared-dataids: config2.yaml,config3.yaml,config4.yaml  # 要加载的多个配置文件# refreshable-dataids: config3.yaml  # 哪些配置支持动态刷新# 方式2:通过ext-config[n]加载多个配置文件(优先级更高,支持更细粒度配置)ext-config[0]:data-id: config2.yaml  # 要加载的配置文件IDext-config[1]:data-id: config3.yaml  # 要加载的配置文件IDgroup: CONFIG3_GROUP  # 该配置所属的分组(覆盖默认group)ext-config[2]:data-id: config4.yaml  # 要加载的配置文件IDgroup: CONFIG4_GROUP  # 该配置所属的分组refresh: true  # 该配置支持动态刷新(配置变更后自动生效)
前面指定的config和下面的ext的关系
  1. 基础关系
    spring.application.name: config1 定义了当前应用的名称,Nacos 会默认加载以该名称为基础的配置文件(默认格式:config1.yaml,结合 namespace 和 group)。
    ext-config额外的配置加载规则,用于加载当前应用需要的其他配置文件(如 config2.yamlconfig3.yaml 等)。
  2. 配置优先级
    ext-config 中指定的配置优先级高于默认配置(即 config1.yaml)。如果 ext-config 中的配置与 config1.yaml 有冲突,会以 ext-config 的配置为准。
    此外,ext-config 内部按数组下标递增优先级依次提高(即 ext-config[2] 优先级高于 ext-config[1])。
  3. 作用场景
    config1 通常是当前应用的主配置,而 ext-config 用于引入公共配置(如数据库、缓存配置)或其他模块的配置,实现配置复用和解耦。
#### 2️⃣代码引入 :::color4 无论是单配置还是多配置,原理都是springcloud将所有配置归纳在一起,然后可以使用@Value(key) 进行获取【记得添加@RefreshScope注解】

:::

  • 使用configurableApplicationContext.getEnvironment().getProperty(“student.name”);的方式,可以直接动态刷新
  • 使用@Value(指定key)+@RefreshScope也可以支持动态刷新

  • 如果是获取多个配置
  • // 从配置中获取config2.name(这个是key)的值,默认值为null
  • 		@Value("${config2.name:null}") 
    
  • 		private String config2name; 
    
package com.muse.nacos.server.nacosserver.controller;
// 导入必要的依赖包
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @description Nacos配置测试控制器* @author: muse**/
// @RefreshScope  // 开启配置自动刷新(当前注释掉了,若启用可让@Value注解的属性动态更新)
@RestController  // 标识该类为REST风格的控制器,返回数据直接作为响应内容
public class NacosServerController {// 注入Spring上下文环境对象,用于动态获取配置@Resourceprivate ConfigurableApplicationContext configurableApplicationContext;// 从配置中获取student.name的值,默认值为null@Value("${student.name:null}")private String name;// 从配置中获取config2.name的值,默认值为null@Value("${config2.name:null}")private String config2name;  // 变量名应为config2Name// 从配置中获取config3.name的值,默认值为null@Value("${config3.name:null}")private String config3name;  // 变量名应为config3Name// 从配置中获取config4.name的值,默认值为null@Value("${config4.name:null}")private String config4name;  // 变量名应为config4Name/*** 测试接口:http://localhost:9002/name* 说明:* 如果只是通过@Value获得的配置信息,不会随着Nacos的修改操作而获得最新配置信息。* 实时获取最新配置信息有两种方式:* 方式1:添加@RefreshScope注解。* 方式2:通过getProperty的方式,获得最新的配置信息。** @return 配置信息对比结果*/@GetMapping("/name")  // 映射GET请求到/name路径public String getName() {// 方式2:通过上下文环境动态获取最新的student.name配置String name1 = configurableApplicationContext.getEnvironment().getProperty("student.name");// 返回@Value获取的值和动态获取的值的对比return String.format("name=%s <br> name1=%s", name, name1);}/*** 测试接口:http://localhost:9002/allname* 用于获取所有配置文件中的name属性*/@GetMapping("/allname")  // 映射GET请求到/allname路径public String getAllName() {// 返回多个配置文件中的name属性值return String.format("config1Name=%s<br> config2Name=%s<br> config3Name=%s<br> config4Name=%s", name, config2ame, config3ame, config4ame);}
}

集群配置读取

原理

在测试环境中,直接配置多个集群地址让springcloud感知即可

spring:application:name: config1  # 应用名称,会作为默认dataId的一部分(默认格式:${name}-${profile}.${extension})cloud:nacos:config:server-addr: 127.0.0.1:8860,127.0.0.1:8861,127.0.0.1:8862  # 多个集群地址

如果其中一个节点挂了,则会自动用另外的

在生产环境中,通常不直接写地址,而是通过slb(负载均衡)

  • 生产环境中,通常会在 Nacos 集群前部署 SLB(如阿里云 SLB、Nginx 等),此时客户端只需配置 SLB 的地址(如 <font style="color:rgb(0, 0, 0);">nacos-slb.com:80,DNS会将该域名转为实际上SLB的地址</font>),由 SLB 负责分发流量到后端 Nacos 节点。
详解

1. DNS(域名系统)的作用

当 Spring Cloud 应用(客户端)需要访问 Nacos 集群时,首先会通过 DNS 解析 nacos-slb.com 这个域名

  • 作用:DNS 负责将 “易记的域名”(如 nacos-slb.com)转换为 SLB(负载均衡器)的 IP 地址。这样客户端无需记住复杂的 SLB IP,只需通过域名即可发起访问,同时也便于后续 SLB IP 变更时,只需修改 DNS 解析记录,无需修改客户端配置。

2. SLB(负载均衡器)的作用

客户端通过 DNS 拿到 SLB 的 IP 后,会向 SLB 发起请求

  • 作用:SLB 接收客户端请求后,会按照预设的负载均衡策略(如轮询、权重等),将流量分发到后端的多个 Nacos 节点(比如部署在不同服务器上的 Nacos 实例)。这样既避免了单台 Nacos 节点因流量过大而故障,又能在某台 Nacos 节点宕机时,自动将流量切换到其他健康节点,保障 Nacos 集群的高可用性。

3. 整体流程示例

假设客户端要从 Nacos 拉取配置:

  1. 客户端代码中配置的是 Nacos 相关地址为 nacos-slb.com:80(通过域名访问 SLB)。
  2. 客户端发起请求时,先向 DNS 服务器查询 nacos-slb.com 对应的 IP,DNS 返回 SLB 的 IP(比如 192.168.1.100)。
  3. 客户端向 192.168.1.100:80(SLB)发起请求。
  4. SLB 将请求转发到后端健康的 Nacos 节点(比如 10.0.0.1:8848)。
  5. Nacos 节点处理请求,返回配置数据给客户端。

通过 DNS + SLB + Nacos 集群的组合,既实现了域名的便捷访问与解耦(DNS 负责域名解析),又实现了流量的负载均衡与高可用(SLB 负责分发和故障转移),保障了生产环境中 Nacos 服务的稳定运行。

![](https://i-blog.csdnimg.cn/img_convert/b38ef063b1b4fa9b171f5fd6e227f4f9.png)
搭建集群

在三个nacos中,cluster.conf都得改为:填充对应的要作为集群节点的端口号和ip

使用:

在springcloud中的server-addr:多个节点用 , 隔开即可

spring:application:name: config1  # 应用名称,会作为默认dataId的一部分(默认格式:${name}-${profile}.${extension})cloud:nacos:config:server-addr: 127.0.0.1:8860,127.0.0.1:8861,127.0.0.1:8862  # 集群地址

Windows 系统 Nacos 单机 / 集群操作指南

Nacos 默认使用嵌入式数据库(Derby)存储数据,仅适合测试;生产 / 开发环境需配置外部数据库(以 MySQL 为例),避免数据丢失和集群数据不一致。以下在原有操作基础上,补充外部数据库连接步骤。

一、单机模式操作步骤
1. 前置准备:创建 MySQL 数据库
  1. 打开 MySQL 客户端(如 Navicat、MySQL Workbench),执行以下 SQL 创建 Nacos 专用数据库(默认库名 <font style="color:rgb(0, 0, 0);">nacos_config</font>,可自定义):
CREATE DATABASE IF NOT EXISTS nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. 进入 <font style="color:rgb(0, 0, 0);">nacos_config</font> 数据库,执行 Nacos 自带的数据库脚本:
    脚本路径:<font style="color:rgb(0, 0, 0);">Nacos 安装目录/conf/nacos-mysql.sql</font>(直接复制脚本内容到 MySQL 客户端执行,会自动创建表结构和初始化数据)。
2. 配置外部数据库连接
  • 进入 Nacos 安装目录的 <font style="color:rgb(0, 0, 0);">conf</font> 文件夹:cmd
cd D:\nacos\conf
  • 用文本编辑器打开 <font style="color:rgb(0, 0, 0);">application.properties</font>,添加 MySQL 连接配置(放在鉴权配置之前或之后均可):properties
# 1. 启用外部数据库(禁用嵌入式 Derby)
spring.datasource.platform=mysql
# 2. 配置 MySQL 数据源数量(单 MySQL 实例填 1)
db.num=1
# 3. MySQL 数据库连接地址(替换为你的 MySQL IP、端口、库名)
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# 4. MySQL 账号(替换为你的 MySQL 用户名)
db.user.0=root
# 5. MySQL 密码(替换为你的 MySQL 密码)
db.password.0=123456
3. 配置鉴权(Nacos 3.0+ 必需)
  • 继续在 <font style="color:rgb(0, 0, 0);">application.properties</font> 中添加鉴权密钥(至少 32 个字符):properties
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
  • 保存文件,数据库和鉴权配置完成。
4. 启动 Nacos 单机版
  • 进入 <font style="color:rgb(0, 0, 0);">bin</font> 目录:cmd
cd D:\nacos\bin
  • 启动单机模式(此时数据会存储到 MySQL,而非嵌入式数据库):cmd
startup.cmd -m standalone
  • 验证:访问 <font style="color:rgb(0, 0, 0);">http://localhost:8848/nacos</font>,登录后在「配置管理」添加配置,再到 MySQL 的 <font style="color:rgb(0, 0, 0);">nacos_config</font> 库的 <font style="color:rgb(0, 0, 0);">config_info</font> 表中,可看到新增的配置数据,说明数据库连接成功。
5. 关闭、查看状态、其他操作(同之前)
  • 关闭:启动窗口按 <font style="color:rgb(0, 0, 0);">Ctrl + C</font> 并输入 <font style="color:rgb(0, 0, 0);">Y</font>,或另开 Cmd 执行 <font style="color:rgb(0, 0, 0);">shutdown.cmd</font>
  • 查看状态:检查端口 <font style="color:rgb(0, 0, 0);">netstat -ano | findstr "8848"</font>,查看进程 <font style="color:rgb(0, 0, 0);">tasklist | findstr "java"</font>
  • 修改端口 / 清理缓存:同原有步骤(清理缓存不影响 MySQL 中的数据)。
二、集群模式操作步骤

集群模式下,所有节点需连接同一个 MySQL 数据库(确保数据一致性),步骤如下:

1. 前置准备
  1. 创建 MySQL 数据库:同单机模式步骤 1(仅需创建 1 个 <font style="color:rgb(0, 0, 0);">nacos_config</font> 库,所有节点共用)。
  2. 复制 Nacos 安装包:复制 Nacos 目录为 <font style="color:rgb(0, 0, 0);">nacos-node1</font><font style="color:rgb(0, 0, 0);">nacos-node2</font><font style="color:rgb(0, 0, 0);">nacos-node3</font>(3 个节点)。
2. 配置各节点(以 <font style="color:rgb(0, 0, 0);">nacos-node1</font> 为例,其他节点同理)
(1)配置外部数据库连接
  • 进入 <font style="color:rgb(0, 0, 0);">nacos-node1\conf</font> 目录,打开 <font style="color:rgb(0, 0, 0);">application.properties</font>,添加 MySQL 配置(所有节点的数据库配置完全一致):properties
# 启用外部数据库
spring.datasource.platform=mysql
# 数据源数量(单 MySQL 实例填 1)
db.num=1
# MySQL 连接地址(替换为你的 MySQL 信息)
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# MySQL 账号
db.user.0=root
# MySQL 密码
db.password.0=123456
(2)配置鉴权
  • 继续在 <font style="color:rgb(0, 0, 0);">application.properties</font> 中添加统一鉴权密钥(所有节点的密钥必须相同):properties
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
(3)修改节点端口
  • <font style="color:rgb(0, 0, 0);">application.properties</font> 中设置当前节点的端口(3 个节点端口不同):properties
server.port=8848  # node1 用 8848,node2 用 8849,node3 用 8850
(4)配置集群节点列表
  • <font style="color:rgb(0, 0, 0);">nacos-node1\conf</font> 目录下,将 <font style="color:rgb(0, 0, 0);">cluster.conf.example</font> 重命名为 <font style="color:rgb(0, 0, 0);">cluster.conf</font>,并修改内容为所有节点的 IP + 端口:plaintext
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
  • 注意<font style="color:rgb(0, 0, 0);">nacos-node2</font><font style="color:rgb(0, 0, 0);">nacos-node3</font><font style="color:rgb(0, 0, 0);">cluster.conf</font> 内容与 <font style="color:rgb(0, 0, 0);">node1</font> 完全一致(确保所有节点知道集群内其他节点)。
3. 启动集群
  • 分别打开 3 个 Cmd 窗口,启动每个节点:cmd
# 启动 node1
cd D:\nacos-node1\bin
startup.cmd# 启动 node2
cd D:\nacos-node2\bin
startup.cmd# 启动 node3
cd D:\nacos-node3\bin
startup.cmd
4. 验证集群与数据库
  1. 检查端口:执行以下命令,确认 8848、8849、8850 端口均已占用:cmd
netstat -ano | findstr "8848 8849 8850"
  1. 验证集群状态:访问任意节点控制台(如 <font style="color:rgb(0, 0, 0);">http://localhost:8848/nacos</font>),登录后进入「集群管理」→「节点列表」,3 个节点均显示「健康」。
  2. 验证数据库:在控制台添加一条配置(如 DataID 为 <font style="color:rgb(0, 0, 0);">test-cluster</font>),然后到 MySQL 的 <font style="color:rgb(0, 0, 0);">nacos_config.config_info</font> 表中,可看到该配置数据;再登录其他节点控制台,也能看到这条配置,说明集群数据通过 MySQL 保持一致。
5. 关闭集群(同之前)
  • 分别在 3 个 Cmd 窗口执行关闭命令:cmd
# 关闭 node1
cd D:\nacos-node1\bin
shutdown.cmd# 关闭 node2
cd D:\nacos-node2\bin
shutdown.cmd# 关闭 node3
cd D:\nacos-node3\bin
shutdown.cmd
三、关键说明
  1. 数据库版本要求:Nacos 支持 MySQL 5.7+ 或 8.0+,若使用 MySQL 8.0,需确保 <font style="color:rgb(0, 0, 0);">application.properties</font><font style="color:rgb(0, 0, 0);">db.url.0</font> 已添加 <font style="color:rgb(0, 0, 0);">serverTimezone=UTC</font>(避免时区报错)。
  2. 集群数据一致性:所有节点必须连接同一个 MySQL 数据库,否则会出现配置 / 服务数据不一致。
  3. 密码特殊字符处理:若 MySQL 密码含特殊字符(如 <font style="color:rgb(0, 0, 0);">!@#$</font>),需在 <font style="color:rgb(0, 0, 0);">db.password.0</font> 中用双引号包裹(如 <font style="color:rgb(0, 0, 0);">db.password.0="123!@#"</font>)。
  4. 嵌入式数据库禁用:配置 <font style="color:rgb(0, 0, 0);">spring.datasource.platform=mysql</font> 后,Nacos 会自动禁用 Derby,无需额外操作。
四、代码开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96736.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android webview更新记录-aosp

一、下载 webview下载地址&#xff0c;感谢火哥分享&#xff0c;版本很全。 https://www.firepx.com/app/android-system-webview/ 二、更新 external/chromium-webview/prebuilt 具体更新那个目录&#xff0c;需要查看编译架构 这个看你的lunch就行&#xff0c;这里我的是a…

无感FOC(无传感器磁场定向控制)

我们来详细解析无感FOC&#xff08;无传感器磁场定向控制&#xff09;中的高频方波注入&#xff08;High-Frequency Square-Wave Injection, HFSWI&#xff09;​​ 的原理。这是一个用于零低速或极低速范围内估算转子位置的核心技术。核心思想与要解决的问题在电机静止或转速极…

MATLAB基于博弈论组合赋权-云模型的煤与瓦斯突出危险性评价

MATLAB基于博弈论组合赋权-云模型的煤与瓦斯突出危险性评价 1. 问题背景与核心目标 背景&#xff1a;煤与瓦斯突出是煤矿生产中的一种极其复杂的动力灾害&#xff0c;其发生机理复杂&#xff0c;影响因素众多&#xff08;如地应力、瓦斯压力、煤体物理属性等&#xff09;。对其…

JavaWeb-Servlet总结及JSP

目录 一、文件下载 二、ServletConfig对象 三、Web.xml文件使用总结 四、server.xml文件 五、JSP动态网页技术 1.概念&#xff1a; 2.动态网页&#xff1a; 3.特点&#xff1a; 4.JSP的访问原理&#xff1a; 5.JSP的文档说明&#xff1a; 6.jsp实际运行文件&#xff…

DDIM和DDPM之 间的区别与联系

核心关系概述 首先&#xff0c;要理解DDIM并不是一个全新的模型&#xff0c;而是DDPM的一个精巧的重新参数化和扩展。它们使用完全相同的训练目标和方法&#xff0c;因此你可以用一个训练好的DDPM模型直接来运行DDIM的采样算法&#xff0c;而无需重新训练。 DDIM的核心贡献是&a…

c++---map和set

这里再提二叉树&#xff08;二叉搜索树&#xff09;&#xff0c;是为了后面讲解map和set做准备。 一、二叉搜索树 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树。 若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

windows下,podman迁移镜像文件位置

docker-desktop有自带的镜像文件位置迁移功能&#xff0c;但podman-desktop还没有&#xff0c;所以只能自己操作wsl导入导出来实现# 1.一定要先停止当前machine podman machine stop# 2. 导出当前 machine&#xff08;会生成 tar 镜像&#xff09; wsl --export podman-machine…

Champ-基于3D的人物图像到动画视频生成框架

本文转载自&#xff1a;https://www.hello123.com/champ ** 一、&#x1f916; Champ 是什么&#xff1f; 阿里 南大 复旦联手打造的虚拟人动作黑科技&#xff01;Champ 可不是普通动画工具&#xff0c;它能把你随手拍的小视频变成专业级 3D 动画 —— 无论跳舞、打拳还是走…

Thingsboard 3.4 源码运行 Mac Mini

拉取源码 git clone https://github.com/thingsboard/thingsboard.gitjdk11 java -version java version "11.0.27" 2025-04-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.278-LTS-232) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.278-LTS-23…

【AI大模型面试宝典60题】1-5

目录 Q1:仅编码器(BERT 类)、仅解码器(GPT 类)和完整的编码器-解码器架构各有什么优缺点? 1. 编码器架构 (Encoder-only) - 代表:BERT系列 2. 解码器架构 (Decoder-only) - 代表:GPT系列 3. 编码器-解码器架构 (Encoder-Decoder) - 代表:T5、BART 升华与总结 (总…

macOS中找不到钥匙串访问

如果在macOS中找不到钥匙串访问&#xff0c;请操作如下命令&#xff1a; security list-keychains可以看到类似&#xff1a; “/Library/Keychains/System.keychain” 然后执行&#xff1a; open /Library/Keychains/System.keychain然后可以将应用保留在程序坞中保留。

UCOSIII移植——学习笔记1

本文是笔者在学习 正点原子官方 的《【正点原子】手把手教你学UCOS-III实时操作系统》系列视频时整理的笔记。 视频讲解清晰透彻&#xff0c;非常感谢UP主的无私奉献&#xff01;原课程链接如下&#xff1a; &#x1f449; B站视频链接&#xff1a;【正点原子】手把手教你学UCO…

SpringBootCodeGenerator使用JSqlParser解析DDL CREATE SQL 语句

&#x1f9e0; 使用 JSqlParser 解析 CREATE TABLE SQL 语句详解在数据库开发中&#xff0c;我们常常需要从 SQL 中提取表结构信息&#xff0c;比如字段名、类型、注释等。相比使用正则表达式&#xff0c;JSqlParser 提供了更可靠的方式来解析 SQL 语句&#xff0c;尤其适用于复…

css3新增-网格Grid布局

目录flex弹性布局Gird布局开启网格布局定义网格中的行和列长度值百分比值新单位fr关键字函数minmax(min, max)函数-repeatauto-fill vs auto-fit举例说明grid-template-areasgapgrid-auto-columns和grid-auto-rowsjustify-contentalign-contentjustify-contentalign-contentjus…

最新最强新太极工具3.6 支持Windows和不支持mac电脑,支持免改码,和改码,支持12—18系统

温馨提示&#xff1a;文末有资源获取方式最新最强太极工具3.6支持Windows和Mac计算机&#xff0c;支持无代码更改和代码更改&#xff0c;支持12-18个系统 支持A7-A11芯片、Apple 5s x、iPad A7至A11芯片&#xff0c;支持所有者锁定、激活锁定、无法激活&#xff08;密码界面和禁…

深入浅出 C++20:新特性与实践

C20 是 C 编程语言的一次重要更新&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升代码的简洁性、安全性和性能。本文将详细介绍 C20 的一些核心特性&#xff0c;并通过示例代码帮助读者理解这些特性的应用场景。C20 新特性总结 以下是 C20 的主要新特性及其简要描述&a…

CSS 属性概述

CSS 属性概述 CSS 属性用于控制 HTML 元素的样式和行为&#xff0c;包括布局、颜色、字体、动画等。以下是常用的 CSS 属性分类及示例&#xff1a; 布局相关属性 display: 控制元素的显示方式&#xff0c;如 block、inline、flex、grid。position: 定义元素的定位方式&#…

--- 统一请求入口 Gateway ---

spring cloud gateway 官方文档 Spring Cloud Gateway 中文文档 什么是api网关 对于微服务的每个接口&#xff0c;我们都需要校验请求的权限是否足够&#xff0c;而微服务把项目细化除了许多个接口&#xff0c;若这些接口都要对服务进行权限校验的话&#xff0c;那么无疑加重…

返利app的消息队列架构:基于RabbitMQ的异步通信与解耦实践

返利app的消息队列架构&#xff1a;基于RabbitMQ的异步通信与解耦实践 大家好&#xff0c;我是阿可&#xff0c;微赚淘客系统及省赚客APP创始人&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在返利app的业务流程中&#xff0c;用户下单、返利计算…

Vue3 响应式失效 debug:Proxy 陷阱导致数据更新异常的深度排查

人们眼中的天才之所以卓越非凡&#xff0c;并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。———— 马尔科姆格拉德威尔 &#x1f31f; Hello&#xff0c;我是Xxtaoaooo&#xff01; &#x1f308; “代码是逻辑的诗篇&#xff0…