0%

Elasticsearch 动态添加分词器:解决非动态配置更新问题

在 Elasticsearch 中,索引的部分配置(如分词器、分片数)属于非动态配置,创建索引后无法直接修改,否则会报 Can't update non dynamic settings 错误。若需为运行中的索引添加新分词器,需通过 “关闭索引→修改配置→重新打开索引” 的流程实现。

操作步骤详解

关闭索引

关闭索引后,索引暂时不可读写,但数据不会丢失,此时可修改非动态配置:

1
POST my_index/_close  # 关闭名为my_index的索引

响应示例

1
2
3
{
"acknowledged": true
}

添加 / 修改分词器配置

通过 _settings API 为关闭的索引添加新分词器(如按逗号拆分的 comma_analyzer):

1
2
3
4
5
6
7
8
9
10
11
12
13
PUT my_index/_settings
{
"settings": {
"analysis": {
"analyzer": {
"comma_analyzer": { # 自定义分词器名称
"type": "pattern", # 基于正则模式的分词器
"pattern": "," # 按逗号拆分
}
}
}
}
}

配置说明

阅读全文 »

properties文件中文

idea中properties文件默认中文会转为ascii

1
#\u4E2D\u6587

这样注释的可读性太低了,可以设置一下

idea中properties中文

1
#中文

MyBatis 逆向工程全指南:从配置到高级定制(含 IDEA 实战与避坑)

MyBatis 逆向工程(MyBatis Generator,简称 MBG)是 MyBatis 官方提供的代码生成工具,可根据数据库表自动生成 实体类、Mapper 接口、Mapper XML 文件,大幅减少重复的 CRUD 代码编写工作。 依赖优化、高级配置(如分页 / 注释 / 逻辑删除)、IDEA 快捷配置、常见问题解决方案工程化最佳实践,帮助你高效落地逆向工程。

逆向工程核心依赖与版本选型

1. Maven 依赖配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<dependencies>
<!-- MyBatis 核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>

<!-- MyBatis 逆向工程核心包 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.2</version> <!-- 最新稳定版,修复旧版bug -->
<scope>provided</scope> <!-- 仅编译期使用,避免打包到生产环境 -->
</dependency>

<!-- MySQL 驱动(需与数据库版本匹配,8.0+用8.x版本) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>runtime</scope>
</dependency>

<!-- 日志依赖(便于查看逆向工程执行日志,可选) -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
<scope>test</scope>
</dependency>
</dependencies>

<!-- 可选:配置 Maven 插件,通过命令行执行逆向工程 -->
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.2</version>
<configuration>
<!-- 逆向工程配置文件路径 -->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<!-- 执行后是否覆盖已有文件(建议开发期设为true) -->
<overwrite>true</overwrite>
<!-- 打印执行日志 -->
<verbose>true</verbose>
</configuration>
<dependencies>
<!-- 插件依赖的数据库驱动(避免版本冲突) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

逆向工程配置文件深度解析

1. 完整配置文件(generatorConfig.xml

阅读全文 »

Spring Security 核心过滤器详解:过滤器链的工作机制与职责分工

Spring Security 的本质是一个过滤器链,所有 Web 安全功能(认证、授权、CSRF 防护等)均通过不同职责的过滤器协同实现。每个过滤器专注于单一功能,按特定顺序组成链,确保请求在到达业务代码前完成安全校验。从 “职责定义→工作流程→关键源码→使用场景” 四个维度,彻底讲透每个过滤器的作用与协作逻辑。

过滤器链的整体执行顺序

在分析单个过滤器前,需先明确过滤器链的默认执行顺序(Spring Security 自动维护,顺序不可随意调整),这是理解安全流程的基础:

执行顺序 过滤器名称 核心职责
1 SecurityContextPersistenceFilter 管理 SecurityContext(创建 / 清空)
2 CsrfFilter 防止 CSRF 攻击(验证 CSRF Token)
3 LogoutFilter 处理退出登录请求
4 UsernamePasswordAuthenticationFilter 处理表单登录(用户名 / 密码认证)
5 AnonymousAuthenticationFilter 为未认证用户分配匿名身份
6 SessionManagementFilter 管理 Session(防固定攻击、限制会话数量)
7 ExceptionTranslationFilter 捕获并处理认证 / 授权异常
8 FilterSecurityInterceptor 权限校验(判断用户是否有权访问资源)

注:实际项目中可能存在更多过滤器(如 RememberMeAuthenticationFilter、OAuth2 相关过滤器),但上述 8 个是最核心的基础过滤器。

核心过滤器详解

1. SecurityContextPersistenceFilter:安全上下文的 “管家”

核心职责:在请求开始时创建 SecurityContext(存储用户认证信息),在请求结束时清空 SecurityContextHolder(避免 ThreadLocal 内存泄漏),是整个安全流程的 “基础保障”。

工作流程
  1. 请求到达时:
    • HttpSession 中读取 SecurityContext(若存在,说明用户已登录);
    • 若不存在,创建新的 SecurityContext
    • SecurityContext 存入 SecurityContextHolder(ThreadLocal 存储,供后续过滤器使用)。
  2. 请求结束时:
    • SecurityContext 有变化(如用户刚登录),将其写入 HttpSession
    • 调用 SecurityContextHolder.clearContext(),清空当前线程的 SecurityContext
关键源码
阅读全文 »

红黑树:自平衡二叉查找树的高效实现

红黑树是一种自平衡的二叉查找树,通过一套特定的规则(颜色约束和旋转操作)保证树的高度始终维持在O(logn)级别,解决了普通二叉查找树在极端情况下退化为链表(查询效率降至O(n))的问题。它广泛应用于 Java 的TreeMap、C++ 的map等集合类,以及数据库索引的底层实现。

二叉查找树的局限性与红黑树的诞生

二叉查找树的核心特性

二叉查找树(BST)满足:

  • 左子树所有节点值 < 根节点值;
  • 右子树所有节点值 > 根节点值;
  • 左右子树均为二叉查找树。

其查询、插入、删除的平均时间复杂度为O(logn),但在有序插入时(如依次插入 1,2,3,4),会退化为单链表,此时操作复杂度飙升至O(n)

根据二分查找树的特性来说,使用中序遍历可以得到一个由小到大的有序序列。

插入节点

阅读全文 »