0%

使用 Nacos 作为配置中心:动态配置管理的实现

Nacos 不仅是优秀的服务注册中心,还能作为配置中心替代 Spring Cloud Config,支持配置的动态更新、环境隔离、共享配置等功能。本文详细介绍如何使用 Nacos 实现配置中心的核心功能。

Nacos 配置中心的核心概念

在使用 Nacos 配置中心前,需理解三个核心概念,用于精确定位配置:

  • Data ID:配置集的唯一标识,格式为${prefix}-${spring.profiles.active}.${file-extension}
  • Group:配置分组,默认DEFAULT_GROUP,用于区分不同业务场景的配置;
  • Namespace:命名空间,默认public,用于隔离不同环境(如开发、测试、生产)。

快速集成 Nacos 配置中心

1. 引入依赖

在 Spring Boot 项目中添加 Nacos 配置中心依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- Spring Cloud Alibaba Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<!-- 版本需与Spring Cloud Alibaba版本匹配 -->
</dependency>

<!-- 必要的Web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 配置 Nacos 连接信息

注意:Nacos 配置中心的配置需放在bootstrap.yml(或bootstrap.properties)中,因为配置中心的配置需要在应用启动早期加载。

阅读全文 »

使用 Nacos 作为服务注册中心:快速集成与实战

Nacos 作为 Spring Cloud Alibaba 生态的核心组件,不仅提供了强大的服务注册发现能力,还支持动态配置管理。本文详细介绍如何将 Nacos 集成到微服务中作为注册中心,实现服务的注册与发现。

前期准备:启动 Nacos 服务

在使用 Nacos 作为注册中心前,需确保 Nacos 服务已启动:

  1. 启动单机模式(开发环境):
    进入 Nacos 安装目录的bin文件夹,执行以下命令:

    1
    2
    3
    4
    # Linux/Mac
    sh startup.sh -m standalone
    # Windows
    startup.cmd -m standalone
  2. 验证启动成功
    访问 Nacos 控制台 http://localhost:8848/nacos,使用默认账号密码(nacos/nacos)登录,能看到控制台界面即启动成功。

服务提供者集成 Nacos

1. 引入依赖

在服务提供者的pom.xml中添加 Nacos 服务发现依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- Spring Cloud Alibaba Nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- 版本需与Spring Cloud Alibaba版本匹配,如2.2.7.RELEASE -->
</dependency>

<!-- Spring Boot Web(提供REST接口) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
阅读全文 »

MySQL 高级语句:冲突处理、表操作与数据导入导出

在日常数据库操作中,除了基础的增删改查,还会遇到主键冲突处理、表备份、数据迁移等场景。MySQL 提供了一系列高级语句来简化这些操作,本文详细解析常用高级语句的用法与场景。

主键 / 唯一键冲突处理语句

当插入数据时遇到主键(PRIMARY KEY)或唯一键(UNIQUE)冲突,MySQL 提供了三种处理方式,避免直接报错。

1. INSERT IGNORE INTO:冲突时忽略插入

  • 作用:若插入的数据与现有主键 / 唯一键冲突,则忽略当前插入操作(不报错,也不修改数据)。
  • 适用场景:希望保留旧数据,跳过重复插入的场景(如批量导入时去重)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 表结构(id为主键)
CREATE TABLE staff (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);

-- 初始数据
INSERT INTO staff VALUES (1, '张三', 20);

-- 插入冲突数据(id=1已存在)
INSERT IGNORE INTO staff VALUES (1, '李四', 25); -- 无报错,数据不变
SELECT * FROM staff; -- 仍为 (1, '张三', 20)

2. INSERT ... ON DUPLICATE KEY UPDATE:冲突时更新

  • 作用:若插入冲突,则执行 UPDATE 语句更新指定字段(保留旧数据的部分字段,更新其他字段)。
  • 适用场景:需要用新数据更新旧数据的场景(如用户信息更新)。

示例

阅读全文 »

Spring Boot 自动配置原理详解:从注解到源码的全链路拆解

Spring Boot 的 “自动配置” 是其核心特性之一,本质是通过 “约定大于配置” 的思想,在启动时自动加载符合条件的配置类,减少手动 XML/Java 配置。本文基于 Spring Boot 2.x 版本,从 “入口注解→核心选择器→配置加载→条件过滤→上下文触发” 五个维度,彻底拆解自动配置的底层逻辑,帮你理解 “为什么引入依赖就能自动生效”。

自动配置的入口:@SpringBootApplication 组合注解

自动配置的起点是启动类上的 @SpringBootApplication 注解 —— 它并非单一注解,而是 @Configuration + @EnableAutoConfiguration + @ComponentScan 的组合,其中 @EnableAutoConfiguration 是自动配置的 “总开关”。

1. @SpringBootApplication 源码拆解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
// 1. 标识为 Spring Boot 配置类(本质是 @Configuration 的语义化封装)
@SpringBootConfiguration
// 2. 自动配置核心:开启并触发自动配置逻辑
@EnableAutoConfiguration
// 3. 组件扫描:扫描当前包及其子包的 @Component/@Controller/@Service 等 Bean
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)
})
public @interface SpringBootApplication {
// 排除指定的自动配置类(如 exclude = DataSourceAutoConfiguration.class)
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
三个子注解的核心作用:
注解 核心功能 对自动配置的意义
@SpringBootConfiguration 等同于 @Configuration,允许在类中用 @Bean 注册 Bean 提供自动配置类的 “配置类身份”
@EnableAutoConfiguration 开启自动配置,导入符合条件的自动配置类 自动配置的 “总开关”,核心中的核心
@ComponentScan 扫描并注册组件 Bean 确保用户自定义的 Bean 能被加载,与自动配置 Bean 协同

自动配置的核心:@EnableAutoConfiguration 注解

@EnableAutoConfiguration 是触发自动配置的关键,其核心逻辑是通过 @Import(AutoConfigurationImportSelector.class) 导入一个 “选择器”,由该选择器加载并筛选自动配置类。

1. @EnableAutoConfiguration 源码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
// 1. 导入自动配置类选择器:AutoConfigurationImportSelector
@Import(AutoConfigurationImportSelector.class)
// 2. 自动配置包扫描(默认是启动类所在的包)
@AutoConfigurationPackage
public @interface EnableAutoConfiguration {
// 开关:通过配置 spring.boot.enableautoconfiguration=false 关闭自动配置
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

// 排除不需要的自动配置类(如数据源自动配置)
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
两个关键细节:
阅读全文 »

Spring Boot 使用外置 Tomcat 部署详解:从配置到运行全流程

Spring Boot 默认集成了嵌入式 Tomcat,可通过 java -jar 直接启动应用,但在某些场景下(如企业统一管理服务器、需要特定 Tomcat 配置),需将应用部署到外置 Tomcat 中。从 “打包方式修改→依赖调整→启动类改造→部署运行” 四个维度,详细讲解 Spring Boot 应用部署到外置 Tomcat 的完整流程,并解答常见问题,帮你顺利完成外置容器部署。

外置 Tomcat 部署的适用场景

在决定使用外置 Tomcat 前,需明确其适用场景,避免不必要的复杂配置:

  • 企业级服务器管理:大型企业通常有统一的服务器集群(如 Tomcat 集群),需将应用部署到指定外置容器;
  • 自定义 Tomcat 配置:需要修改 Tomcat 核心配置(如线程池、连接器、安全配置),且这些配置无法通过 Spring Boot 嵌入式容器参数覆盖;
  • 多应用共享容器:多个 Spring Boot 应用共享同一个 Tomcat 实例,节省服务器资源;
  • 兼容性需求:依赖特定版本的 Tomcat(如因安全漏洞需使用定制化 Tomcat 版本)。

若无需上述场景,优先使用 Spring Boot 嵌入式 Tomcat(开发效率高、部署简单)。

部署到外置 Tomcat 的核心步骤

步骤 1:修改打包方式为 WAR

Spring Boot 默认打包为 JAR(包含嵌入式容器),部署到外置 Tomcat 需改为 WAR 包(不包含嵌入式容器,仅包含应用代码)。

pom.xml 中修改打包类型:

阅读全文 »