From 37b228c3c21b9fac2af7ac0737273b8d6f4a69a1 Mon Sep 17 00:00:00 2001 From: yinkanglong Date: Sun, 7 Jan 2024 21:39:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=9A=E5=AE=A2=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Java/02Java标准库/07 正则表达式.md | 156 +++--- Spring/Springboot/07 数据访问-1jdbc.md | 23 +- Spring/Springboot/07 数据访问-3MyBatis.md | 476 ++++++++++++++++-- Spring/Springboot/07 数据访问-4Redis.md | 12 +- Spring/Springboot/11 启动过程.md | 45 +- blog/博客/02 博客系统设计文档.md | 72 +-- blog/博客/03 博客系统详细设计.md | 54 +- blog/博客/draw/ER.drawio.svg | 66 ++- blog/博客/draw/logic.drawio.svg | 100 ++-- kubenets/04-4.StatefulSet.md | 27 + 设计模式/4.7 观察者.md | 1 + 设计模式/5.9 订阅发布模式(事件驱动).md | 582 ++++++++++++++++++++++ 设计模式/image/2023-12-29-16-01-39.png | Bin 0 -> 183337 bytes 13 files changed, 1360 insertions(+), 254 deletions(-) create mode 100644 设计模式/5.9 订阅发布模式(事件驱动).md create mode 100644 设计模式/image/2023-12-29-16-01-39.png diff --git a/Java/02Java标准库/07 正则表达式.md b/Java/02Java标准库/07 正则表达式.md index b6d93ed3..3a05367d 100644 --- a/Java/02Java标准库/07 正则表达式.md +++ b/Java/02Java标准库/07 正则表达式.md @@ -1,16 +1,15 @@ > https://blog.csdn.net/m0_62618110/article/details/123704869 - - - # Java 正则表达式 ## 0 概述 ### 简介 + 正则表达式(regex)是一个字符串,由字面值字符和特殊符号组成,是用来描述匹配一个字符串集合的模式,可以用来匹配、查找字符串。 正则表达式的两个主要作用: + * 查找:在字符串中查找符合固定模式的子串 * 匹配:整个字符串是否符合某个格式 @@ -47,7 +46,6 @@ public class RegexMatches } ``` - ## 1 正则表达式语法 * 在其他语言中,`\\`表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。 @@ -55,37 +53,35 @@ public class RegexMatches * 不要在重复词符中使用空白。如B{3,6} ,不能写成 B{3, 6}。空格也是有含义的。 * 可以使用括号来将模式分组。(ab){3}匹配ababab , 而ab{3} 匹配 abbb。 -| 字符 | 匹配 | 示例 | -|---|---|---| -| . | 任意单个字符,除换行符外 | jav.匹配java | -| [ ] | [ ] 中的任意一个字符 | java匹配j[abc]va | -| - | [ ] 内表示字符范围 | java匹配[a-z]av[a-g] | -| ^ | 在[ ]内的开头,匹配除[ ]内的字符之外的任意一个字符 | java匹配j[^b-f]va | -| | | 或 | x|y匹配x或y | -| \ | 将下一字符标记为特殊字符、文本、反向引用或八进制转义符 | \(匹配( | -| $ | 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。 | ;$匹配位于一行及外围的;号 | -| * | 零次或多次匹配前面的字符 | zo*匹配zoo或z | -| + | 一次或多次匹配前面的字符 | zo+匹配zo或zoo | -| ? | 零次或一次匹配前面的字符 | zo?匹配z或zo | -| p{n} | n 是非负整数。正好匹配 n 次 | o{2}匹配food中的两个o | -| p{n,} | n 是非负整数。至少匹配 n 次 | o{2}匹配foood中的所有o | -| p{n,m} | M 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次 | o{1,3}匹配fooood中的三个o | -| \p{P} | 一个标点字符 !"#$%&'()*+,-./:;<=>?@[\]^_'{|}~ | J\p{P}a匹配J?a | -| \b | 匹配一个字边界 | va\b匹配java中的va,但不匹配javar中的va | -| \B | 非字边界匹配 | va\B匹配javar中的va,但不匹配java中的va | -| \d | 数字字符匹配 | 1[\\d]匹配13 | -| \D | 非数字字符匹配 | [\\D]java匹配Jjava | -| \w | 单词字符 | java匹配[\\w]ava | -| \W | 非单词字符 | $java匹配[\\W]java | -| \s | 空白字符 | Java 2匹配Java\\s2 | -| \S | 非空白字符 | java匹配 j[\\S]va | -| \f | 匹配换页符 | 等效于\x0c和\cL | -| \n | 匹配换行符 | 等效于\x0a和\cJ | - - - +| 字符 | 匹配 | 示例 | +| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | --------------------------------------- | +| . | 任意单个字符,除换行符外 | jav.匹配java | +| [ ] | [ ] 中的任意一个字符 | java匹配j[abc]va | +| - | [ ] 内表示字符范围 | java匹配[a-z]av[a-g] | +| ^ | 在[ ]内的开头,匹配除[ ]内的字符之外的任意一个字符 | java匹配j[^b-f]va | +| | | 或 | +| \ | 将下一字符标记为特殊字符、文本、反向引用或八进制转义符 | \(匹配( | +| $ | 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。 | ;$匹配位于一行及外围的;号 | | +| * | 零次或多次匹配前面的字符 | zo*匹配zoo或z | +| + | 一次或多次匹配前面的字符 | zo+匹配zo或zoo | +| ? | 零次或一次匹配前面的字符 | zo?匹配z或zo | +| p{n} | n 是非负整数。正好匹配 n 次 | o{2}匹配food中的两个o | +| p{n,} | n 是非负整数。至少匹配 n 次 | o{2}匹配foood中的所有o | +| p{n,m} | M 和 n 是非负整数,其中 n<= m。匹配至少 n 次,至多 m 次 | o{1,3}匹配fooood中的三个o | +| \p{P} | 一个标点字符 !"#$%&'()*+,-./:;<=>?@[\]^_'{ | }~ | +| \b | 匹配一个字边界 | va\b匹配java中的va,但不匹配javar中的va | +| \B | 非字边界匹配 | va\B匹配javar中的va,但不匹配java中的va | +| \d | 数字字符匹配 | 1[\\d]匹配13 | +| \D | 非数字字符匹配 | [\\D]java匹配Jjava | +| \w | 单词字符 | java匹配[\\w]ava | +| \W | 非单词字符 | $java匹配[\\W]java | +| \s | 空白字符 | Java 2匹配Java\\s2 | +| \S | 非空白字符 | java匹配 j[\\S]va | +| \f | 匹配换页符 | 等效于\x0c和\cL | +| \n | 匹配换行符 | 等效于\x0a和\cJ | ### 分组说明 + ``` 正则表达式-字符类 @@ -130,19 +126,70 @@ public class RegexMatches 正则表达式-分组括号() ``` - ## 2 基本概念 + ### Patter类和Matcher类 + Pattern 类: pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。 Matcher 类: Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。 +#### 匹配模式 + + +**1、Pattern.MULTILINE模式的用法** + +正则表达式中出现了^或者$, 默认只会匹配第一行. 设置了Pattern.MULTILINE模式,会匹配所有行。例如, + +``` +Pattern p1 = Pattern.compile("^.*b.*$"); +//输出false,因为正则表达式中出现了^或$,默认只会匹配第一行,第二行的b匹配不到。 +System.out.println(p1.matcher("a\nb").find()); +Pattern p2 = Pattern.compile("^.*b.*$",Pattern.MULTILINE); +//输出true,指定了Pattern.MULTILINE模式,就可以匹配多行了。 +System.out.println(p2.matcher("a\nb").find()); +``` + +**2、Pattern.DOTALL模式的用法** + +默认情况下, 正则表达式中点(.)不会匹配换行符, 设置了Pattern.DOTALL模式, 才会匹配所有字符包括换行符。例如, + +``` +Pattern p1 = Pattern.compile("a.*b"); +//输出false,默认点(.)没有匹配换行符 +System.out.println(p1.matcher("a\nb").find()); +Pattern p2 = Pattern.compile("a.*b", Pattern.DOTALL); +//输出true,指定Pattern.DOTALL模式,可以匹配换行符。 +System.out.println(p2.matcher("a\nb").find()); +``` + +**3、同时指定Pattern.MULTILINE和Pattern.DOTALL模式** + +实际情况中要是比较复杂的情况,可能Pattern.MULTILINE模式和Pattern.DOTAL模式需要同时指定来匹配多行,下面看一下, + +``` +Pattern p1 = Pattern.compile("^a.*b$"); +//输出false +System.out.println(p1.matcher("cc\na\nb").find()); +Pattern p2 = Pattern.compile("^a.*b$", Pattern.DOTALL); +//输出false,因为有^或&没有匹配到下一行 +System.out.println(p2.matcher("cc\na\nb").find()); +Pattern p3 = Pattern.compile("^a.*b$", Pattern.MULTILINE); +//输出false,匹配到下一行,但.没有匹配换行符 +System.out.println(p3.matcher("cc\na\nb").find()); +//指定多个模式,中间用|隔开 +Pattern p4 = Pattern.compile("^a.*b$", Pattern.DOTALL|Pattern.MULTILINE); +//输出true +System.out.println(p4.matcher("cc\na\nb").find()); +``` + + ### 捕获组 - 1. 捕获组是把多个字符当成一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。 + ``` 捕获组通过从左到右计算其括号来编号。 @@ -153,27 +200,23 @@ Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pat (B(C)) (C) ``` + 2. 捕获组可以通过调用matcher对象的groupCount方法来查看表达式有多少个分组。(groupCount方法返回一个int值,来表示matcher对象当前有多少个捕获组) - 3. 还有一个特殊的组零(group(0)),它代表整个表达式。(该组不包括在groupCount的返回值中) - -4. 以 (?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数。 - +4. 以 (?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数。 ## 3 Matcher用法 - - ### 索引方法 1. public int start() -返回以前匹配的初始索引。 + 返回以前匹配的初始索引。 2. public int start(int group) - 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引 + 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引 3. public int end() -返回最后匹配字符之后的偏移量。 + 返回最后匹配字符之后的偏移量。 4. public int end(int group) -返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。 + 返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。 ```java import java.util.regex.Matcher; @@ -203,13 +246,13 @@ public class RegexMatches ### 匹配和查找方法 1. public boolean lookingAt() - 尝试将从区域开头开始的输入序列与该模式匹配。开头匹配。 + 尝试将从区域开头开始的输入序列与该模式匹配。开头匹配。 2. public boolean find() -尝试查找与该模式匹配的输入序列的下一个子序列。 + 尝试查找与该模式匹配的输入序列的下一个子序列。 3. public boolean find(int start) -重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。 + 重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。 4. public boolean matches() -尝试将整个区域与模式匹配。全局匹配。 + 尝试将整个区域与模式匹配。全局匹配。 ```java import java.util.regex.Matcher; @@ -240,19 +283,19 @@ public class RegexMatches } } ``` + ### 替换方法 1. public Matcher appendReplacement(StringBuffer sb, String replacement) -实现非终端添加和替换步骤。 + 实现非终端添加和替换步骤。 2. public StringBuffer appendTail(StringBuffer sb) -实现终端添加和替换步骤。 + 实现终端添加和替换步骤。 3. public String replaceAll(String replacement) - 替换模式与给定替换字符串相匹配的输入序列的每个子序列。 + 替换模式与给定替换字符串相匹配的输入序列的每个子序列。 4. public String replaceFirst(String replacement) - 替换模式与给定替换字符串匹配的输入序列的第一个子序列。 + 替换模式与给定替换字符串匹配的输入序列的第一个子序列。 5. public static String quoteReplacement(String s) -返回指定字符串的字面替换字符串。这个方法返回一个字符串,就像传递给Matcher类的appendReplacement 方法一个字面字符串一样工作。 - + 返回指定字符串的字面替换字符串。这个方法返回一个字符串,就像传递给Matcher类的appendReplacement 方法一个字面字符串一样工作。 ```java import java.util.regex.Matcher; @@ -298,7 +341,6 @@ public class RegexMatches } ``` - ## 4 String自带的正则表达式功能 -见String \ No newline at end of file +见String diff --git a/Spring/Springboot/07 数据访问-1jdbc.md b/Spring/Springboot/07 数据访问-1jdbc.md index 4f3b6e1c..38514511 100644 --- a/Spring/Springboot/07 数据访问-1jdbc.md +++ b/Spring/Springboot/07 数据访问-1jdbc.md @@ -2,11 +2,13 @@ > 数据库与数据源不是同一个东西。。。 > 三层关键概念需要理解 +> > 1. 数据库驱动mysql、hsqldb > 2. 数据源datasource和数据库连接池Harica、Druid > 3. 数据库操作工具JDBCTemplates、Mybatis ### 数据源配置 + pom.xml ``` @@ -17,7 +19,9 @@ pom.xml ``` ### 嵌入式数据库驱动 + 嵌入式数据库支持:H2、HSQL、Derby。不需要任何配置,被集成到springboot的jar包当中。 + ``` org.hsqldb @@ -36,7 +40,9 @@ pom.xml mysql-connector-java ``` + * 配置数据源信息 + ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=dbuser @@ -44,11 +50,20 @@ spring.datasource.password=dbpass spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver//定义了数据引擎 ``` +### 自动配置 + +* DataSourceAutoConfiguration + * 底层自动配置了默认的数据源Hicari +* DataSourceTransactionAutoConfiguration +* JdbcTemplateAutoConfiguration +* JndiAutoConfiguration + ### 连接JNDI数据源 JNDI,避免了程序与数据库之间的紧耦合,是指更容易配置和部署。 JNDI不需要用户使用java代码与数据库建立连接,而是将连接交给应用服务器进行管理。java负责与应用服务器上的JNDI通信。 + ``` spring.datasource.jndi-name=java:jboss/datasources/customers ``` @@ -56,6 +71,7 @@ spring.datasource.jndi-name=java:jboss/datasources/customers ## 2 JdbcTemplate操作数据库 ### 准备数据库 + ``` CREATE TABLE `User` ( `name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL, @@ -64,6 +80,7 @@ CREATE TABLE `User` ( ``` ### 编写领域对象 + 并不是MVC的一部分。数据层,实现数据访问 ``` @@ -78,9 +95,11 @@ public class User { ``` ### 编写数据访问对象 + 并非MVC的一部分。服务层,实现业务逻辑 * 定义包含插入、删除、查询的抽象接口UserService + ```java public interface UserService { @@ -167,7 +186,9 @@ public class UserServiceImpl implements UserService { ``` ### 编写单元测试用例 + 创建对UserService的单元测试用例,通过创建、删除和查询来验证数据库操作的正确性。 + ```java @RunWith(SpringRunner.class) @SpringBootTest @@ -208,4 +229,4 @@ public class Chapter31ApplicationTests { } } -``` \ No newline at end of file +``` diff --git a/Spring/Springboot/07 数据访问-3MyBatis.md b/Spring/Springboot/07 数据访问-3MyBatis.md index 741cf460..b9e6137d 100644 --- a/Spring/Springboot/07 数据访问-3MyBatis.md +++ b/Spring/Springboot/07 数据访问-3MyBatis.md @@ -1,9 +1,6 @@ > 对象关系映射模型Hibernate。用来实现非常轻量级的对象的封装。将对象与数据库建立映射关系。实现增删查改。 > MyBatis与Hibernate非常相似。对象关系映射模型ORG。java对象与关系数据库映射的模型。 - - - ## 1 配置MyBatis ### 最佳实践 @@ -16,8 +13,7 @@ ● 复杂方法编写mapper.xml进行绑定映射 ● @MapperScan("com.atguigu.admin.mapper") 简化,其他的接口就可以不用标注@Mapper注解 - -### 在pom.xml中添加MyBatis依赖 +### 添加MyBatis依赖 ``` @@ -33,6 +29,7 @@ ``` ### 配置数据库连接 + 在application.properties中配置mysql的链接配置 ```sh @@ -42,7 +39,7 @@ spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` -### 创建关系数据表 +### 创建数据表 ```sql CREATE TABLE `User` ( @@ -53,7 +50,7 @@ CREATE TABLE `User` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ``` -### 创建数据表的java对象 +### 创建java对象 ```java @Data @@ -72,17 +69,16 @@ public class User { } ``` +### MyBatis参数传递 -## 2 MyBatis参数传递 - -### 使用@Param参数传递 +使用@Param参数传递 ``` @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})") int insert(@Param("name") String name, @Param("age") Integer age); ``` -### 使用map 传递参数 +使用map 传递参数 ``` @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})") @@ -94,13 +90,14 @@ map.put("age", 40); userMapper.insertByMap(map); ``` -### 使用普通java对象 +使用普通java对象 + ``` @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})") int insertByUser(User user); ``` -## 3 注解模式 +## 2注解模式 ### 创建数据表的操作接口 @@ -116,7 +113,9 @@ public interface UserMapper { } ``` + ### 增删改查操作 + ```java public interface UserMapper { @@ -133,7 +132,9 @@ public interface UserMapper { void delete(Long id); } ``` + 对增删查改的调用 + ```java @Transactional @RunWith(SpringRunner.class) @@ -163,9 +164,12 @@ public class ApplicationTests { } ``` -## 4 XML方式 +## 3 XML方式 + +### 创建Mapper文件 + +在应用主类中增加mapper的扫描包配置: -### 在应用主类中增加mapper的扫描包配置: ``` @MapperScan("com.didispace.chapter36.mapper") @SpringBootApplication @@ -178,7 +182,8 @@ public class Chapter36Application { } ``` -### Mapper包下创建User表 +Mapper包下创建User表 + ``` public interface UserMapper { @@ -189,12 +194,13 @@ public interface UserMapper { } ``` -### 在配置文件中通过mybatis.mapper-locations参数指定xml配置的位置 +在配置文件中通过mybatis.mapper-locations参数指定xml配置的位置 ``` mybatis.mapper-locations=classpath:mapper/*.xml ``` -### xml配置目录下创建User表的mapper配置 + +xml配置目录下创建User表的mapper配置 ``` @@ -213,6 +219,7 @@ mybatis.mapper-locations=classpath:mapper/*.xml ``` ### 对xml方式进行调用 + ``` @Slf4j @RunWith(SpringRunner.class) @@ -234,11 +241,19 @@ public class Chapter36ApplicationTests { } ``` -## 5 整合 MyBatis-Plus 完成CRUD +## 4 MyBatis-Plus + ### 什么是MyBatis-Plus + MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 mybatis plus 官网 -建议安装 MybatisX 插件 +建议安装 MybatisX 插件 + +* 通用Mapper能力 +* 增强单表查询能力 +* 多种主键策略,支持UUID和雪花算法 +* 基础代码生成器 +* 乐观锁 ### 引入 @@ -249,7 +264,9 @@ mybatis plus 官网 3.4.1 ``` + ### 自动配置 + ● MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。mybatis-plus:xxx 就是对mybatis-plus的定制 ● SqlSessionFactory 自动配置好。底层是容器中默认的数据源 ● mapperLocations 自动配置好的。有默认值。classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。 建议以后sql映射文件,放在 mapper下 @@ -261,55 +278,168 @@ mybatis plus 官网 优点: ● 只需要我们的Mapper继承 BaseMapper 就可以拥有crud能力 +### 进阶操作 + +1. 设置表明和自增主键 +2. 使用条件构造器 + 1. `boolean condition`表示该条件**是否**加入最后生成的sql中 + 2. 支持多种条件表达式拼接SQL语句。每种表达式有多种类型的接口 + +``` +AbstractWrapper + allEq + eq + ne + gt + ge + lt + le + between + notBetween + like + notLike + likeLeft + likeRight + notLikeLeft + notLikeRight + isNull + isNotNull + in + notIn + inSql + notInSql + groupBy + orderByAsc + orderByDesc + orderBy + having + func + or + and + nested +apply + last + exists + notExists +QueryWrapper + select +UpdateWrapper + set + setSql + lambda +``` + + + +### CRUD实例 -### CRUD DAO层 + ```java - @GetMapping("/user/delete/{id}") - public String deleteUser(@PathVariable("id") Long id, - @RequestParam(value = "pn",defaultValue = "1")Integer pn, - RedirectAttributes ra){ + +public interface ArticleMapper extends BaseMapper
{ +} - userService.removeById(id); - ra.addAttribute("pn",pn); - return "redirect:/dynamic_table"; +public interface BaseMapper extends Mapper { + int insert(T entity); + + int deleteById(Serializable id); + + int deleteById(T entity); + + default int deleteByMap(Map columnMap) { + return this.delete((Wrapper)Wrappers.query().allEq(columnMap)); } + int delete(@Param("ew") Wrapper queryWrapper); - @GetMapping("/dynamic_table") - public String dynamic_table(@RequestParam(value="pn",defaultValue = "1") Integer pn,Model model){ - //表格内容的遍历 -// response.sendError -// List users = Arrays.asList(new User("zhangsan", "123456"), -// new User("lisi", "123444"), -// new User("haha", "aaaaa"), -// new User("hehe ", "aaddd")); -// model.addAttribute("users",users); -// -// if(users.size()>3){ -// throw new UserTooManyException(); -// } - //从数据库中查出user表中的用户进行展示 + int deleteBatchIds(@Param("coll") Collection idList); - //构造分页参数 - Page page = new Page<>(pn, 2); - //调用page进行分页 - Page userPage = userService.page(page, null); + int updateById(@Param("et") T entity); + int update(@Param("et") T entity, @Param("ew") Wrapper updateWrapper); -// userPage.getRecords() -// userPage.getCurrent() -// userPage.getPages() - - - model.addAttribute("users",userPage); - - return "table/dynamic_table"; + default int update(@Param("ew") Wrapper updateWrapper) { + return this.update((Object)null, updateWrapper); } + + T selectById(Serializable id); + + List selectBatchIds(@Param("coll") Collection idList); + + void selectBatchIds(@Param("coll") Collection idList, ResultHandler resultHandler); + + default List selectByMap(Map columnMap) { + return this.selectList((Wrapper)Wrappers.query().allEq(columnMap)); + } + + default void selectByMap(Map columnMap, ResultHandler resultHandler) { + this.selectList((Wrapper)Wrappers.query().allEq(columnMap), resultHandler); + } + + default T selectOne(@Param("ew") Wrapper queryWrapper) { + return this.selectOne(queryWrapper, true); + } + + default T selectOne(@Param("ew") Wrapper queryWrapper, boolean throwEx) { + List list = this.selectList(queryWrapper); + int size = list.size(); + if (size == 1) { + return list.get(0); + } else if (size > 1) { + if (throwEx) { + throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + size); + } else { + return list.get(0); + } + } else { + return null; + } + } + + default boolean exists(Wrapper queryWrapper) { + Long count = this.selectCount(queryWrapper); + return null != count && count > 0L; + } + + Long selectCount(@Param("ew") Wrapper queryWrapper); + + List selectList(@Param("ew") Wrapper queryWrapper); + + void selectList(@Param("ew") Wrapper queryWrapper, ResultHandler resultHandler); + + List selectList(IPage page, @Param("ew") Wrapper queryWrapper); + + void selectList(IPage page, @Param("ew") Wrapper queryWrapper, ResultHandler resultHandler); + + List> selectMaps(@Param("ew") Wrapper queryWrapper); + + void selectMaps(@Param("ew") Wrapper queryWrapper, ResultHandler> resultHandler); + + List> selectMaps(IPage> page, @Param("ew") Wrapper queryWrapper); + + void selectMaps(IPage> page, @Param("ew") Wrapper queryWrapper, ResultHandler> resultHandler); + + List selectObjs(@Param("ew") Wrapper queryWrapper); + + void selectObjs(@Param("ew") Wrapper queryWrapper, ResultHandler resultHandler); + + default

> P selectPage(P page, @Param("ew") Wrapper queryWrapper) { + page.setRecords(this.selectList(page, queryWrapper)); + return page; + } + + default

>> P selectMapsPage(P page, @Param("ew") Wrapper queryWrapper) { + page.setRecords(this.selectMaps(page, queryWrapper)); + return page; + } +} + ``` ### Service层 + ```java @Service public class UserServiceImpl extends ServiceImpl implements UserService { @@ -320,4 +450,240 @@ public class UserServiceImpl extends ServiceImpl implements Use public interface UserService extends IService { } -``` \ No newline at end of file +``` + +#### 完整实例 + +```java +package com.baomidou.mybatisplus.samples.crud; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.samples.crud.entity.User; +import com.baomidou.mybatisplus.samples.crud.entity.User2; +import com.baomidou.mybatisplus.samples.crud.mapper.User2Mapper; +import com.baomidou.mybatisplus.samples.crud.mapper.UserMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + *

+ * 内置 CRUD 演示 + *

+ * + * @author hubin + * @since 2018-08-11 + */ +@SpringBootTest +public class CrudTest { + @Autowired + private UserMapper mapper; + @Autowired + private User2Mapper user2Mapper; + + @Test + public void aInsert() { + User user = new User(); + user.setName("小羊"); + user.setAge(3); + user.setEmail("abc@mp.com"); + assertThat(mapper.insert(user)).isGreaterThan(0); + // 成功直接拿回写的 ID + assertThat(user.getId()).isNotNull(); + } + + + @Test + public void bDelete() { + assertThat(mapper.deleteById(3L)).isGreaterThan(0); + assertThat(mapper.delete(new QueryWrapper() + .lambda().eq(User::getName, "Sandy"))).isGreaterThan(0); + } + + + @Test + public void cUpdate() { + assertThat(mapper.updateById(new User().setId(1L).setEmail("ab@c.c"))).isGreaterThan(0); + assertThat( + mapper.update( + new User().setName("mp"), + Wrappers.lambdaUpdate() + .set(User::getAge, 3) + .eq(User::getId, 2) + ) + ).isGreaterThan(0); + User user = mapper.selectById(2); + assertThat(user.getAge()).isEqualTo(3); + assertThat(user.getName()).isEqualTo("mp"); + + mapper.update( + null, + Wrappers.lambdaUpdate().set(User::getEmail, null).eq(User::getId, 2) + ); + assertThat(mapper.selectById(1).getEmail()).isEqualTo("ab@c.c"); + user = mapper.selectById(2); + assertThat(user.getEmail()).isNull(); + assertThat(user.getName()).isEqualTo("mp"); + + mapper.update( + new User().setEmail("miemie@baomidou.com"), + new QueryWrapper() + .lambda().eq(User::getId, 2) + ); + user = mapper.selectById(2); + assertThat(user.getEmail()).isEqualTo("miemie@baomidou.com"); + + mapper.update( + new User().setEmail("miemie2@baomidou.com"), + Wrappers.lambdaUpdate() + .set(User::getAge, null) + .eq(User::getId, 2) + ); + user = mapper.selectById(2); + assertThat(user.getEmail()).isEqualTo("miemie2@baomidou.com"); + assertThat(user.getAge()).isNull(); + } + + + @Test + public void dSelect() { + mapper.insert( + new User().setId(10086L) + .setName("miemie") + .setEmail("miemie@baomidou.com") + .setAge(3)); + assertThat(mapper.selectById(10086L).getEmail()).isEqualTo("miemie@baomidou.com"); + User user = mapper.selectOne(new QueryWrapper().lambda().eq(User::getId, 10086)); + assertThat(user.getName()).isEqualTo("miemie"); + assertThat(user.getAge()).isEqualTo(3); + + mapper.selectList(Wrappers.lambdaQuery().select(User::getId)) + .forEach(x -> { + assertThat(x.getId()).isNotNull(); + assertThat(x.getEmail()).isNull(); + assertThat(x.getName()).isNull(); + assertThat(x.getAge()).isNull(); + }); + mapper.selectList(new QueryWrapper().select("id", "name")) + .forEach(x -> { + assertThat(x.getId()).isNotNull(); + assertThat(x.getEmail()).isNull(); + assertThat(x.getName()).isNotNull(); + assertThat(x.getAge()).isNull(); + }); + } + + @Test + public void orderBy() { + List users = mapper.selectList(Wrappers.query().orderByAsc("age")); + assertThat(users).isNotEmpty(); + //多字段排序 + List users2 = mapper.selectList(Wrappers.query().orderByAsc("age", "name")); + assertThat(users2).isNotEmpty(); + //先按age升序排列,age相同再按name降序排列 + List users3 = mapper.selectList(Wrappers.query().orderByAsc("age").orderByDesc("name")); + assertThat(users3).isNotEmpty(); + } + + @Test + public void selectMaps() { + List> mapList = mapper.selectMaps(Wrappers.query().orderByAsc("age")); + assertThat(mapList).isNotEmpty(); + assertThat(mapList.get(0)).isNotEmpty(); + System.out.println(mapList.get(0)); + } + + @Test + public void selectMapsPage() { + IPage> page = mapper.selectMapsPage(new Page<>(1, 5), Wrappers.query().orderByAsc("age")); + assertThat(page).isNotNull(); + assertThat(page.getRecords()).isNotEmpty(); + assertThat(page.getRecords().get(0)).isNotEmpty(); + System.out.println(page.getRecords().get(0)); + } + + @Test + public void orderByLambda() { + List users = mapper.selectList(Wrappers.lambdaQuery().orderByAsc(User::getAge)); + assertThat(users).isNotEmpty(); + //多字段排序 + List users2 = mapper.selectList(Wrappers.lambdaQuery().orderByAsc(User::getAge, User::getName)); + assertThat(users2).isNotEmpty(); + //先按age升序排列,age相同再按name降序排列 + List users3 = mapper.selectList(Wrappers.lambdaQuery().orderByAsc(User::getAge).orderByDesc(User::getName)); + assertThat(users3).isNotEmpty(); + } + + @Test + public void testSelectMaxId() { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("max(id) as id"); + User user = mapper.selectOne(wrapper); + System.out.println("maxId=" + user.getId()); + List users = mapper.selectList(Wrappers.lambdaQuery().orderByDesc(User::getId)); + Assertions.assertEquals(user.getId().longValue(), users.get(0).getId().longValue()); + } + + @Test + public void testGroup() { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("age, count(*)") + .groupBy("age"); + List> maplist = mapper.selectMaps(wrapper); + for (Map mp : maplist) { + System.out.println(mp); + } + /** + * lambdaQueryWrapper groupBy orderBy + */ + LambdaQueryWrapper lambdaQueryWrapper = new QueryWrapper().lambda() + .select(User::getAge) + .groupBy(User::getAge) + .orderByAsc(User::getAge); + for (User user : mapper.selectList(lambdaQueryWrapper)) { + System.out.println(user); + } + } + + @Test + public void testTableFieldExistFalse() { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("age, count(age) as count") + .groupBy("age"); + List list = mapper.selectList(wrapper); + list.forEach(System.out::println); + list.forEach(x -> { + Assertions.assertNull(x.getId()); + Assertions.assertNotNull(x.getAge()); + Assertions.assertNotNull(x.getCount()); + }); + mapper.insert( + new User().setId(10088L) + .setName("miemie") + .setEmail("miemie@baomidou.com") + .setAge(3)); + User miemie = mapper.selectById(10088L); + Assertions.assertNotNull(miemie); + + } + + @Test + public void testSqlCondition() { + Assertions.assertEquals(user2Mapper.selectList(Wrappers.query() + .setEntity(new User2().setName("n"))).size(), 2); + Assertions.assertEquals(user2Mapper.selectList(Wrappers.query().like("name", "J")).size(), 2); + Assertions.assertEquals(user2Mapper.selectList(Wrappers.query().gt("age", 18) + .setEntity(new User2().setName("J"))).size(), 1); + } +} +``` diff --git a/Spring/Springboot/07 数据访问-4Redis.md b/Spring/Springboot/07 数据访问-4Redis.md index a95d2d95..2a133d85 100644 --- a/Spring/Springboot/07 数据访问-4Redis.md +++ b/Spring/Springboot/07 数据访问-4Redis.md @@ -19,12 +19,12 @@ Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统 ### 配置原理 自动配置: -● RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置 -● 连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration -● 自动注入了RedisTemplate : xxxTemplate; -● 自动注入了StringRedisTemplate;k:v都是String -● key:value -● 底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis +* RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置 +* 连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration +* 自动注入了RedisTemplate : xxxTemplate; +* 自动注入了StringRedisTemplate;k:v都是String +* key:value +* 底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis ### 操作 diff --git a/Spring/Springboot/11 启动过程.md b/Spring/Springboot/11 启动过程.md index 26288aa5..639f8d89 100644 --- a/Spring/Springboot/11 启动过程.md +++ b/Spring/Springboot/11 启动过程.md @@ -308,4 +308,47 @@ ConfigurableApplicationContext context = new SpringApplicationBuilder(Applicatio .sources(ApplicationConfiguration.class) //可以多个Class .run(); context.close(); //上下文关闭 -``` \ No newline at end of file +``` + +## 5 spring.fatoriesSPI中的扩展点 + +在 Spring 框架中,spring.factories 文件是一个 SPI (Service Provider Interface) 的形式,它可以用于定义和加载多个框架扩展点。这些扩展点允许开发人员插入自定义逻辑或覆盖框架提供的默认行为。Spring Boot 使用 spring.factories 文件来支持各种类型的扩展和自定义。 + +spring.factories 文件中可以配置的一些主要扩展点包括: + +自动配置 (EnableAutoConfiguration): +通过在 spring.factories 中列出自动配置类,Spring Boot 可以在启动时自动应用这些配置。这些配置通常会基于类路径和其他环境条件来条件性地配置 Bean。 + +org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.MyAutoConfiguration +应用程序事件监听器 (ApplicationListener): +应用程序事件监听器可以监听和响应 Spring 应用程序上下文中的各种事件,如应用启动、停止和环境准备等。 + +org.springframework.context.ApplicationListener=com.example.MyApplicationListener +失败分析 (FailureAnalyzer): +当应用程序启动失败时,失败分析器可以提供特定的错误报告和解决建议。 + +org.springframework.boot.diagnostics.FailureAnalyzer=com.example.MyFailureAnalyzer +模板引擎 (TemplateAvailabilityProviders): +用于检测是否应该呈现模板以及哪种类型的模板可用。 + +org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider=com.example.MyTemplateAvailabilityProvider +环境后处理器 (EnvironmentPostProcessor): +环境后处理器允许开发人员在应用程序上下文刷新之前对环境(配置属性)进行编程更改。 + +org.springframework.boot.env.EnvironmentPostProcessor=com.example.MyEnvironmentPostProcessor +应用程序上下文初始化器 (ApplicationContextInitializer): +在 ApplicationContext 实例化之前初始化 ApplicationContext 的回调接口,可以用来设置上下文的状态或添加自定义的逻辑。 + +org.springframework.context.ApplicationContextInitializer=com.example.MyApplicationContextInitializer +命令行运行器 (CommandLineRunner) 和 应用程序运行器 (ApplicationRunner): +它们允许在 SpringApplication 运行之后,执行一些额外的代码。 + +org.springframework.boot.CommandLineRunner=com.example.MyCommandLineRunner +org.springframework.boot.ApplicationRunner=com.example.MyApplicationRunner +管理端点 (Endpoint): +自定义管理端点可以通过 Spring Boot Actuator 暴露。 + +org.springframework.boot.actuate.endpoint.Endpoint=com.example.MyCustomEndpoint +使用 spring.factories 文件为框架扩展点提供实现有几个好处:它支持条件化配置、松耦合、易于维护,并且可以在不修改主应用程序代码的情况下增强框架功能。 + +为了使用这些扩展点,开发人员需要在项目的 resources/META-INF/spring.factories 文件中指定他们的实现。然后,当应用程序启动时,Spring Boot 将自动发现并注册这些实现。 \ No newline at end of file diff --git a/blog/博客/02 博客系统设计文档.md b/blog/博客/02 博客系统设计文档.md index 9a406ef3..668d18b7 100644 --- a/blog/博客/02 博客系统设计文档.md +++ b/blog/博客/02 博客系统设计文档.md @@ -1,4 +1,3 @@ - ## 1 架构设计 ### 架构和技术说明 @@ -6,6 +5,7 @@ ![](./draw/arch.drawio.svg) 本项目主要架构包括三部分 + 1. 数据层。通过vscode和markdown创建的笔记内容数据,存储在github上。需要对笔记内容进行重构,以适应多种形式的输出。 2. 业务层。提供博客系统的业务数据访问。 1. Sync模块从github同步数据,存储到本地数据库中对数据进行分析和处理,通过只能算法生成博客的元数据,包括tag、description等,对数据内容进行筛选(根据配置)和完整性校验,可以通过定时任务和Github的流水线触发数据的增量处理任务。 @@ -13,16 +13,20 @@ 3. Article模块提供文章的多级索引,包括目录、tag、日期、关键字等方便用户快速找到自己感兴趣的文章,也方便自己回顾阅读,同时提供了一些基础的交互能力和数据统计能力,包括点赞、评论、访问量。整个系统通过标准Rest接口对外提供访问。 3. 渲染层。通过vue前端框架和element组件库,快速构建前端页面,提供交互能力。访问后端的Rest接口进行渲染。 - ## 2 模型设计 ### 2.1 对象设计 + 文章的对象模型主要包括以下五个:文章、分类、标签、评论、用户。 ![](./draw/ER.drawio.svg) ### 2.2 逻辑设计 + +为了进一步简化设计和防止冗余数据计算,没有必要将分类和Tag进行落库。其本身是对Article表的冗余数据,每次更新article表全量刷新category和tag表冗余且没有必要,直接将tag和Category的构建放到缓存中即可。访问即可刷新重新构建。 + 在逻辑设计的时候应该遵循以下原则 + 1. 不允许使用外键 2. 尽量减少连表操作。连表操作会大大增加数据管理的难度。 @@ -30,49 +34,49 @@ 文章与目录:文章与目录是一对多的关系。可以直接在文章中存储目录的id。不同目录下可能存在同名的子目录。所以目录名称的唯一键应该是 父目录+子目录。 -文章与标签:文章与标签是多对多的关系。不需要建立关联关系表,直接将标签以逗号分割的形式添加到文章里即可。多选可以使用 Like or的方法直接进行查询。标签的名称是唯一键,主要用来显示标签云,不用每次都统计标签的数量 +文章与标签:文章与标签是多对多的关系。不需要建立关联关系表,直接将标签以逗号分割的形式添加到文章里即可。多选可以使用 Like and的方法直接进行查询。标签的名称是唯一键,主要用来显示标签云,不用每次都统计标签的数量 文章与评论:文章与评论是一对多关系。不需要建立关联关系。评论中存储文章id的外键。评论之间可以相互回复,parent_id标识其上一级评论,如果parent_id为零,表示直接回复当篇文章。 +> hash_value字段用来标识文章的完整性 +> +> category添加多级目录标识表去掉,使用路径标识category/category2/category3 ![](./draw/logic.drawio.svg) - - ### 2.3 物理设计 ```sql --【1】创建 blog数据库 -CREATE DATABASE blog SET utf8mb4 COLLATE utf8mb4_unicode_ci; +CREATE DATABASE blog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; --【2】创建用户表 user CREATE TABLE `user` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', - `user_name` varchar(32) NOT NULL COMMENT '用户名', - `password` varchar(64) DEFAULT NULL COMMENT '用户密码', - `nickname` varchar(32) DEFAULT NULL COMMENT '用户名', - `email` varchar(64) DEFAULT NULL COMMENT '用户邮箱', - `role` tinyint DEFAULT 0 COMMENT '注册时间0表示普通用户1表示管理员2表示匿名用户', - `photo` varchar(256) DEFAULT NULL COMMENT '用户头像', - `uuid` varchar(32) DEFAULT NULL COMMENT '唯一标识', - `ip` varchar(20) NOT NULL COMMENT '用户IP', - PRIMARY KEY (`id`), - KEY `user_name` (`user_name`), - KEY `email` (`email`) + `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `username` varchar(32) NOT NULL COMMENT '用户名', + `password` varchar(64) DEFAULT NULL COMMENT '用户密码', + `nickname` varchar(32) DEFAULT NULL COMMENT '用户昵称', + `email` varchar(64) DEFAULT NULL COMMENT '用户邮箱', + `role` tinyint(4) DEFAULT 0 COMMENT '注册时间0表示普通用户1表示管理员2表示匿名用户', + `photo` varchar(256) DEFAULT NULL COMMENT '用户头像', + `uuid` varchar(36) DEFAULT NULL COMMENT '唯一标识', + `ip` varchar(15) NOT NULL COMMENT '用户IP', + PRIMARY KEY (`id`), + KEY `username` (`username`), + KEY `email` (`email`) ); - --【3】创建分类表 \category CREATE TABLE `category` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '目录ID', - `name` varchar(100) NOT NULL COMMENT '标签名称', - `parent` bigint NOT NULL DEFAULT '0' COMMENT '目录ID,0表示顶层目录', + `name` varchar(128) NOT NULL COMMENT '目录名称', + `count` int NOT NULL DEFAULT '0' COMMENT '数量', `description` text DEFAULT NULL COMMENT '目录下README.MD文件的内容', PRIMARY KEY (`id`), - UNITUQ KEY `path`(`parent`,`name`) + UNIQUE KEY `name_key`(`name`) )COMMENT='分类表'; @@ -95,29 +99,26 @@ CREATE TABLE `tag` ( CREATE TABLE `article` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '博文ID', `user_id` bigint NOT NULL COMMENT '发表用户ID', - `category_id` bigint NOT NULL COMMENT '目录ID', `title` varchar(128) NOT NULL COMMENT '博文标题', + `category` varchar(128) NOT NULL COMMENT '目录名称', + `tags` varchar(128) NOT NULL COMMENT '标签', `content` longtext NOT NULL COMMENT '博文内容', `description` text NOT NULL COMMENT '博文简介', `love` int NOT NULL DEFAULT 0 COMMENT '喜欢量', `view` int NOT NULL DEFAULT 0 COMMENT '浏览量', - `order` int NOT NULL DEFAULT 0 COMMENT '评论总数', + `order_number` int NOT NULL DEFAULT 0 COMMENT '评论总数', `state` tinyint NOT NULL DEFAULT 0 COMMENT '状态0标识正常,1表示草稿或隐藏', `path` varchar(256) NOT NULL COMMENT '文章相对路径', `cover` varchar(256) DEFAULT NULL COMMENT '文章封面图片路径', - PRIMARY KEY (`article_id`), + `hash_value` varchar(256) NOT NULL COMMENT '文章哈希', + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(), + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP(), + PRIMARY KEY (`id`), KEY `user_id` (`user_id`), - KEY `category_id`(`category_id`) + UNIQUE KEY `path`(`path`), + KEY `category`(`category`) ) COMMENT='文章表'; ---【6】创建文章标签表 tag -CREATE TABLE `article_tag` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `article_id` bigint NOT NULL COMMENT '文章id', - `tag_id` bigint NOT NULL COMMENT '标签id', - PRIMARY KEY (`id`), - UNIQUE KEY `article_tag_id`(`article_id`,`tag_id`) -) COMMENT='文章标签表'; --【7】创建评论表 comment @@ -126,7 +127,7 @@ CREATE TABLE `comment` ( `user_id` bigint NOT NULL COMMENT '创建者id', `article_id` bigint NOT NULL COMMENT '文章id', `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父评论ID' - `content` varchar(256) DEFAULT '' COMMENT '评论内容', + `content` varchar(256) DEFAULT '' COMMENT '评论内容', PRIMARY KEY (`id`) )COMMENT='评论表'; @@ -139,4 +140,3 @@ CREATE TABLE `comment` ( -- ALTER TABLE blog_comment ADD CONSTRAINT FK_COMMENT_ARTICLEID FOREIGN KEY(article_id) REFERENCES blog_article(id); ``` - diff --git a/blog/博客/03 博客系统详细设计.md b/blog/博客/03 博客系统详细设计.md index 5c708972..8f8b0753 100644 --- a/blog/博客/03 博客系统详细设计.md +++ b/blog/博客/03 博客系统详细设计.md @@ -1,31 +1,61 @@ -# 功能模块设计 +# 后端功能设计 -## 1 文章同步功能 +## 1 数据处理功能 -### 数据同步 +将数据从github的仓库中同步到本地,经过一系列数据处理操作,将数据转化为结构化的本地数据,方便进行展示。 -### 构建目录 +### 1.1 数据同步 -### 构建文章 +创建一个GitRepositoryManage类,用来实现git相关的一系列操作。 -### 构建标签 +- [X] 打开Git仓库。Clone一个仓库到本地。如果仓库存在则Open一个仓库。 +- [X] 获取文件时间。通过Git提交的历史记录,得到每一个文件变更的历史数据。 +- [X] 更新仓库内容。通过GitPull命令刷新仓库的内容。 +- [X] 创建一个SyncDataService,添加一个定时任务,每隔1小时check一遍数据一致性。 +- [X] 使用mysql创建数据表。 +- [X] 使用mybatis-plus操作数据表实现增删查改。用到DAO层即可。 + - [X] 重构了文章的设计文档。tag/category本来就是附属内容,为了简化数据结构,只在内存中生成一份数据,而不是落库。 -### 保存数据 +### 1.2 构建文章 +遍历文章获取一下内容 + +* [X] 构建文章分类:如果一个目录下有.md文件,则该目录的相对路径可以作为分类。 +* [X] 构建文章标题:使用无后缀名的文件名称作为标题 +* [X] 构建文章内容:保存原始数据,原始数据意味着丢失更少的信息。 +* [X] 填充文件路径:获取文章地址相对根目录的相对路径。 +* [X] 生成文件标签:使用标签生成算法提取文章中的五个关键字。并增加标签计数。 +* [X] 生成文章简介:使用简介生成算法提取文章中100字简介。 +* [X] 获取文章时间:使用Git工具获取文章同步的时间 +* [X] 生成文章哈希:使用sh256生成文章哈希值,校验文章是否发生变化。 +* [X] 将文章数据落库。文章和分类、标签之间是软索引。通过路径和标签名称进行管理。 ## 2 文章管理功能 +通过各种方式索引文章。 +### 2.1 文章索引功能 + +* [X] 分页查询文章列表 + + * [X] 按目录搜索。需要传递目录的全路径,在文章中直接检索该目录下的文章。 + * [X] 按标签搜索。支持传递标签多个标签,在文章中列表中直接匹配标签列。支持多个标签交叉匹配 + * [X] 按年月归档。支持根据不同的创建年月索引归档的文章。建立文章的时光轴,并且能够通过下拉不断更新时光轴周围的文章。 +* [X] 文章刷新功能:当笔记提交到git仓库后,自动触发部署流水线回调系统接口,触发数据同步和数据处理。 + + * [X] 支持幂等处理(同一时间只允许调用一次) + * [X] 支持缓存清空操作。及时更新缓存。 + +### 2.2 标签搜索功能 + +* [ ] 查询目录标签云,并支持缓存。 +* [ ] 查询文章标签云。并支持缓存。 +* [ ] 查询年月日归档信息。并支持缓存。 ## 3 评论管理功能 - ## 4 用户管理功能 - ## 5 后台管理功能 - - ## 6 自动部署功能 - diff --git a/blog/博客/draw/ER.drawio.svg b/blog/博客/draw/ER.drawio.svg index 9f499618..f725b805 100644 --- a/blog/博客/draw/ER.drawio.svg +++ b/blog/博客/draw/ER.drawio.svg @@ -1,4 +1,4 @@ - + @@ -99,6 +99,8 @@ + + @@ -117,8 +119,9 @@ - + + @@ -513,30 +516,13 @@
- 分类名称 + 路径
- 分类名称 - - - - - - - -
-
-
- 父分类 -
-
-
-
- - 父分类 + 路径
@@ -547,13 +533,13 @@
- 分类描述 + 描述
- 分类描述 + 描述 @@ -728,6 +714,40 @@ + + + + +
+
+
+ 哈希 +
+
+
+
+ + 哈希 + +
+
+ + + + +
+
+
+ 数量 +
+
+
+
+ + 数量 + +
+
diff --git a/blog/博客/draw/logic.drawio.svg b/blog/博客/draw/logic.drawio.svg index d252b386..032b6297 100644 --- a/blog/博客/draw/logic.drawio.svg +++ b/blog/博客/draw/logic.drawio.svg @@ -1,4 +1,4 @@ - + @@ -63,17 +63,20 @@ - - + + - - + + - - + + - - + + + + + @@ -102,15 +105,6 @@ - - - - - - - - - @@ -167,7 +161,7 @@ - + @@ -186,12 +180,12 @@ - category_id:bigint + title:varchar(128) - title:varchar(128) + category:varchar(128) @@ -234,32 +228,37 @@ cover:varchar(256) - - - + + + hash_value:varchar(256) + + + + + - + tag - - + + id:bigint - - + + name:varchar(32) - - + + count:int - - - description:varchar(256) + + + description:varchar @@ -277,12 +276,12 @@ - name:varchar(32) + name:varchar(256) - parent:bigint + count:int @@ -325,36 +324,11 @@ - - - - - - article_tag - - - - - id:bigint - - - - - article_id:bigint - - - - - tag_id:bigint - - - - - - + + \ No newline at end of file diff --git a/kubenets/04-4.StatefulSet.md b/kubenets/04-4.StatefulSet.md index 8b137891..bfb2fd34 100644 --- a/kubenets/04-4.StatefulSet.md +++ b/kubenets/04-4.StatefulSet.md @@ -1 +1,28 @@ +在 Kubernetes 1.7 及之后的版本中,可以为 StatefulSet 设定 .spec.updateStrategy 字段,以便您可以在改变 StatefulSet 中 Pod 的某些字段时(container/labels/resource request/resource limit/annotation等)禁用滚动更新。 + + +On Delete +OnDelete 策略实现了 StatefulSet 的遗留版本(kuberentes 1.6及以前的版本)的行为。如果 StatefulSet 的 .spec.updateStrategy.type 字段被设置为 OnDelete,当您修改 .spec.template 的内容时,StatefulSet Controller 将不会自动更新其 Pod。您必须手工删除 Pod,此时 StatefulSet Controller 在重新创建 Pod 时,使用修改过的 .spec.template 的内容创建新 Pod。 + +Rolling Updates +.spec.updateStrategy.type 字段的默认值是 RollingUpdate,该策略为 StatefulSet 实现了 Pod 的自动滚动更新。在用户更新 StatefulSet 的 .spec.tempalte 字段时,StatefulSet Controller 将自动地删除并重建 StatefulSet 中的每一个 Pod。处理顺序如下: + +从序号最大的 Pod 开始,逐个删除和更新每一个 Pod,直到序号最小的 Pod 被更新 + +当正在更新的 Pod 达到了 Running 和 Ready 的状态之后,才继续更新其前序 Pod + +Partitions + +通过指定 .spec.updateStrategy.rollingUpdate.partition 字段,可以分片(partitioned)执行RollingUpdate 更新策略。当更新 StatefulSet 的 .spec.template 时: + +序号大于或等于 .spec.updateStrategy.rollingUpdate.partition 的 Pod 将被删除重建 +序号小于 .spec.updateStrategy.rollingUpdate.partition 的 Pod 将不会更新,及时手工删除该 Pod,kubernetes 也会使用前一个版本的 .spec.template 重建该 Pod +如果 .spec.updateStrategy.rollingUpdate.partition 大于 .spec.replicas,更新 .spec.tempalte 将不会影响到任何 Pod +TIP + +大部分情况下,您不需要使用 .spec.updateStrategy.rollingUpdate.partition,除非您碰到如下场景: + +执行预发布 +执行金丝雀更新 +执行按阶段的更新 \ No newline at end of file diff --git a/设计模式/4.7 观察者.md b/设计模式/4.7 观察者.md index bf8db1a0..2d39bb90 100644 --- a/设计模式/4.7 观察者.md +++ b/设计模式/4.7 观察者.md @@ -15,6 +15,7 @@ > * javaSPI。服务提供者接口 > * 在微服务中就是注册中心的发布订阅过程。发布者订阅者、提供者消费者。 > * 在消息中间件中就是发布订阅模式。 +> https://juejin.cn/post/6993999863159455752 **意图** diff --git a/设计模式/5.9 订阅发布模式(事件驱动).md b/设计模式/5.9 订阅发布模式(事件驱动).md new file mode 100644 index 00000000..24b14121 --- /dev/null +++ b/设计模式/5.9 订阅发布模式(事件驱动).md @@ -0,0 +1,582 @@ +# 事件驱动和订阅发布模式 + +## 1 事件驱动/订阅发布模式 + +> 参考文献:https://blog.csdn.net/weixin_46058921/article/details/126978976 + +### 简介 + +事件驱动一个常见的形式就是 发布-订阅 模式,在跨进程的通信间,我们常常使用 消息队列 来实现消息的发布订阅。目前主流的框架中,均采用消息的 发布-订阅 模式来进行大型分布式项目的解耦。使得数据生产方和发送方分离,同时 MQ 还能起到削峰的作用。同一进程内很多时候也需要这种事件驱动机制来进行解耦 + + +### 原理 + +事件机制主要由三个部分组成:事件源、事件对象、监听器 + +* 事件源(订阅发布模式中的发布者):事件发生的起源 +* 事件对象(观察者模式中的主题):事件实体,事件对象会持有一个事件源 +* 监听器(观察者模式中的观察者、订阅发布模式中的订阅者):监听事件对象,对事件对象进行处理 +* 事件分发器(复杂事件模型中负责将将事件源发出的时间触发订阅者的行为,决定了是同步行为还是异步行为) + + +## 2 Java事件驱动 + + +Java 提供了关于事件相关的两个接口: + +* EventObject:事件对象,自定义事件需要继承该类 +* EventListener:事件监听器接口 + + +由于事件源 Source 不需要实现任何接口,所以 Java 中没有给出相应的定义 + +一个利用 Java 原生实现事件的例子: + +* 事件。观察者模式中的主题。 + +```Java +import java.util.EventObject; + +/** + * @Author: chenyang + * @DateTime: 2022/9/21 10:08 + * @Description: 事件对象 + */ +public class JavaEvent extends EventObject { + + private String msg; + + + /** + * Constructs a prototypical Event. + * + * @param source The object on which the Event initially occurred. + * @throws IllegalArgumentException if source is null. + */ + public JavaEvent(Object source, String msg) { + super(source); + this.msg = msg; + } + + public String getMsg() { + return msg; + } +} +``` + +* 事件监听器。观察者模式中的观察者、订阅发布模式中的订阅者 + +``` +import com.yang.common.event.JavaEvent; +import java.util.EventListener; + +/** + * @Author: chenyang + * @DateTime: 2022/9/21 10:09 + * @Description: 事件监听者,按照 Java 规范应实现 EventListener 接口 + */ +public class JavaListener implements EventListener { + + public void handlerEvent(JavaEvent event){ + System.out.println("Java Event msg : " + event.getMsg()); + } +} +``` + +* 事件源发布事件 + +```java +import com.yang.common.event.JavaEvent; +import com.yang.common.listener.JavaListener; +import java.util.EventListener; +import java.util.HashSet; + +/** + * @Author: chenyang + * @DateTime: 2022/9/21 10:12 + * @Description: 事件源 + */ +public class JavaSource { + private static HashSet set = new HashSet<>(); + + public void addListener(EventListener listener){ + set.add(listener); + } + + public void publishEvent(JavaEvent event){ + for (EventListener listener : set) { + ((JavaListener)listener).handlerEvent(event); + + } + } +} +``` + +* 组装并触发事件 + +```java +public class Main { + public static void main(String[] args) { + JavaSource source = new JavaSource(); + JavaListener listener = new JavaListener(); + source.addListener(listener); + source.publishEvent(new JavaEvent(source, "SAY MY NAME !!!")); + } +} +``` + +## 3 Spring事件驱动 + +Spring 提供了事件相关的接口和类,在 Spring 中可以通过实现接口来实现事件的 发布-订阅。Spring 的事件机制是以 Java 的事件机制为基础按需进行了扩展。 + +Spring 中与事件相关的定义如下: + +* ApplicationEvent:继承 ObjectEvent 类,事件源应该继承该类。 + +* ApplicationListener:事件监听者,该类接受一个泛型,供 ApplicationEventPublisher 在发布事件时选择 EventListener。 + +* ApplicationEventPublisher:封装发布事件的方法,通知所有在 Spring 中注册的该事件的监听者进行处理。 + +* ApplicationEventPublisherAware:Spring 提供的 Aware 接口之一,实现该接口的 Bean 可以获取 ApplicationEventPublisher 并进行发布事件。 + +### 通过继承ApplicationEventPublisherAware发布事件 + +* 实现事件对象Event。观察者模式中的主题 + +```java +import org.springframework.context.ApplicationEvent; + +/** + * @Author: chenyang + * @DateTime: 2022/9/21 11:07 + * @Description: 事件对象 + */ +public class SpringEventAware extends ApplicationEvent { + + private String msg; + + public SpringEventAware(Object source, String msg) { + super(source); + this.msg = msg; + } + + public SpringEventAware(Object source) { + super(source); + } + + public String getMsg() { + return msg; + } +} +``` + +* 创建监听器。观察者模式中的观察者,订阅发布模式中的订阅者。 + +```java +import com.yang.common.event.SpringEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +/** + * @Author: chenyang + * @DateTime: 2022/9/21 11:08 + * @Description: 事件监听者,事件监听者实现ApplicationListener, 交由 Spring 进行管理,无需自己进行监听器的注册与通知过程 + */ +@Component +public class SpringListenerAware implements ApplicationListener { + @Override + public void onApplicationEvent(SpringEventAware event) { + System.out.println("publish event, msg is : " + event.getMsg()); + } +} +``` + +* 事件源。观察者模式中的发布者。 + +```java +import com.yang.common.event.SpringEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.stereotype.Component; + +/** + * @Author: chenyang + * @DateTime: 2022/9/21 11:09 + * @Description: 事件源 + */ +@Component +public class SpringPublishAware implements ApplicationEventPublisherAware { + + private ApplicationEventPublisher applicationEventPublisher; + + public void publishEvent(String msg){ + applicationEventPublisher.publishEvent(new SpringEventAware(this, msg)); + } + + @Override + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { + this.applicationEventPublisher = applicationEventPublisher; + } +} + + + + +@Autowired +private SpringPublishAware springPublishAware; + +@Test +void contextLoads2() { + springPublishAware.publishEvent("通过 Spring 实现发布订阅"); +} +``` + +### 通过注入ApplicationEventPublisher发布事件 + +* 事件。观察者模式中的主题 + +```java +@Data +public class Task { + private String name; + private String address; +} + + +public class SpringEvent extends ApplicationEvent { + private Task task; + + public SpringEvent(Task task) { + super(task); + this.task = task; + } + + public Task getTask() { + return task; + } +} +``` + +* 事件监听器。观察者、订阅者。 + +```java +@Component +public class SpringListener implements ApplicationListener { + @Override + public void onApplicationEvent(SpringEvent event) { + Task task = event.getTask(); + System.err.println("事件接受任务"); + System.err.println(task); + System.err.println("任务完成"); + } +} +``` + +* 事件源。通过注入对象发布事件。 + +```java +@Autowired +private ApplicationEventPublisher publisher; + +@Test +void contextLoads3() { + Task task = new Task(); + task.setName("admin"); + task.setAddress("unknown area"); + SpringEvent event = new SpringEvent(task); + System.out.println("开始发布任务"); + publisher.publishEvent(event); + System.out.println("发布任务完成"); +} +``` + + + +以上代码中,可以看到。在 Spring 框架使用事件与在 Java 中使用时间机制其实并没有什么不同,均由 事件源、事件对象以及事件监听者组成。与 Java 原生提供的事件机制不同的是,Spring 中提供了 ApplicationEvent 类作为基类,开发者可以以此为基础定义自己的自定义事件。 + + 在 Spring 中,继承自 ApplicationEvent 的事件对象的监听者,可以由 Spring 容器进行管理,并在发布时通过 ApplicationEventPublisher 进行发布。这就避免了我们自己实现监听者的注册和通知过程,免去了很多繁杂的过程,使得更专心于业务本身。 + +## 4 Spring事件分发框架原理 + +### ApplicationEvent + +* ApplicationEvent 继承了 JDK 中的事件对象 EventObject,在 Spring 中所有事件对象均应继承自 ApplicationEvent。在Spring基础上,其增加了事件发生时的时间戳属性以及序列化ID,并提供了通过事件源进行构建的构造方法。 Spring 中的 ApplicationEvent 设置成抽象类,由于一个单独的 ApplicationEvent 是没有任何语义的,所以需要根据不同场景进行扩展,在其之上为事件赋予意义。此类的说明中,作者也很好的说明了这一点。 + +```java +/** + * Class to be extended by all application events. Abstract as it + * doesn't make sense for generic events to be published directly. + * + * @author Rod Johnson + * @author Juergen Hoeller + */ +public abstract class ApplicationEvent extends EventObject { + + /** use serialVersionUID from Spring 1.2 for interoperability */ + private static final long serialVersionUID = 7099057708183571937L; + + /** System time when the event happened */ + private final long timestamp; + + + /** + * Create a new ApplicationEvent. + * @param source the object on which the event initially occurred (never {@code null}) + */ + public ApplicationEvent(Object source) { + super(source); + this.timestamp = System.currentTimeMillis(); + } + + + /** + * Return the system time in milliseconds when the event happened. + */ + public final long getTimestamp() { + return this.timestamp; + } +} +``` + + +### EventListener + +* JDK 中提供了 EventListener 接口,作为事件监听者标记。Spring 在 EventListener 接口的基础上,提供了 ApplicationListener 接口。该接口接收一个 ApplicationEvent 的子类,完成事件的监听流程。具体源代码如下ApplicationEvent 继承了 JDK 中的事件对象 EventObject,在 Spring 中所有事件对象均应继承自 ApplicationEvent。在Spring基础上,其增加了事件发生时的时间戳属性以及序列化ID,并提供了通过事件源进行构建的构造方法。 Spring 中的 ApplicationEvent 设置成抽象类,由于一个单独的 ApplicationEvent 是没有任何语义的,所以需要根据不同场景进行扩展,在其之上为事件赋予意义。此类的说明中,作者也很好的说明了这。该接口是一个函数型接口,提供了一个 `onApplicationEvent(E extends Application)` 方法定义,所有自行实现的监听者均需要实现该接口,并在该方法中进行事件的处理。 + +```java + +/** + * Interface to be implemented by application event listeners. + * Based on the standard {@code java.util.EventListener} interface + * for the Observer design pattern. + * + *

As of Spring 3.0, an ApplicationListener can generically declare the event type + * that it is interested in. When registered with a Spring ApplicationContext, events + * will be filtered accordingly, with the listener getting invoked for matching event + * objects only. + * + * @author Rod Johnson + * @author Juergen Hoeller + * @param the specific ApplicationEvent subclass to listen to + * @see org.springframework.context.event.ApplicationEventMulticaster + */ +@FunctionalInterface +public interface ApplicationListener extends EventListener { + + /** + * Handle an application event. + * @param event the event to respond to + */ + void onApplicationEvent(E event); + +} +``` + +### ApplicationEventMulticast + +ApplicationEventMulticaster是Spring中事件核心,通知中心,负责将指定的事件类型发布给订阅者。主要包括以下内容。提供一个发布事件的接口multicastEvent + +* 构建并维护事件类型和监听器关系。 +* 解析事件类型resolveDefaultEventType +* 根据事件类型获取监听器列表getApplicationListeners。 +* 实现了事件执行器。事件执行器可以有多种:同步执行器、异步执行器、消息队列异步执行器 + +```java +@Override +public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) { + ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event)); + Executor executor = getTaskExecutor(); + for (ApplicationListener listener : getApplicationListeners(event, type)) { + if (executor != null) { + executor.execute(() -> invokeListener(listener, event)); + } + else { + invokeListener(listener, event); + } + } +} + + +protected Collection> getApplicationListeners( + ApplicationEvent event, ResolvableType eventType) { + + Object source = event.getSource(); + Class sourceType = (source != null ? source.getClass() : null); + ListenerCacheKey cacheKey = new ListenerCacheKey(eventType, sourceType); + + // Potential new retriever to populate + CachedListenerRetriever newRetriever = null; + + // Quick check for existing entry on ConcurrentHashMap + CachedListenerRetriever existingRetriever = this.retrieverCache.get(cacheKey); + if (existingRetriever == null) { + // Caching a new ListenerRetriever if possible + if (this.beanClassLoader == null || + (ClassUtils.isCacheSafe(event.getClass(), this.beanClassLoader) && + (sourceType == null || ClassUtils.isCacheSafe(sourceType, this.beanClassLoader)))) { + newRetriever = new CachedListenerRetriever(); + existingRetriever = this.retrieverCache.putIfAbsent(cacheKey, newRetriever); + if (existingRetriever != null) { + newRetriever = null; // no need to populate it in retrieveApplicationListeners + } + } + } + + if (existingRetriever != null) { + Collection> result = existingRetriever.getApplicationListeners(); + if (result != null) { + return result; + } + // If result is null, the existing retriever is not fully populated yet by another thread. + // Proceed like caching wasn't possible for this current local attempt. + } + + return retrieveApplicationListeners(eventType, sourceType, newRetriever); +} + +``` + +大致流程: 通过时间类型和事件中的数据源类型,构建一个缓存key,先去缓存中获取有无此key对应的事件处理器。 如果不存在则构建一个新的 `ListenerRetriever`,然后调用 `retrieveApplicationListeners`方法获得监听的listener + +此处以 SimpleApplicationEventMulticaster 中的方法定义为例,作为默认注入的类型,通常我们在默认情况下的事件发布流程均遵循该实现。 从程序中可以看出,multicastEvent的主要逻辑可以分为三部分: + +* 获取事件类型,主要用来获得Spring Event的实际类型。resolveDefaultEventType(event)) + +* getApplicationListeners(event, type)根据事件和事件类型去获得此事件和事件类型的监听器 + +* 遍历监听者集合,通过 multicaster 内持有的 Executor 进行通知,此处最后调用了 ApplicationListener 中的 onApplicationEvent 方法,这一方法正是我们在自定义 ApplicationListener 时必须要覆写的方法。 + + +### 自动注册事件监听关系 + +* Spring 中,不需要我们手动进行监听器注册。ApplicationListener 对象一旦在 Spring 容器中被注册,Spring 会进行监听器的注册,实现事件的监听。在介绍监听者注册流程之前, +* 首先需要介绍介绍一下org.springframework.context.event.ApplicationEventMulticaster,其主要定义了管理事件监听者,与发布事件到监听者的相关操作,若没有定义,Spring 容器将默认实例化 SimpleApplicationEventMulticaster 。 +* 在 Spring 中,初始化容器时会调用 org.springframework.context.ConfigurableApplicationContext 接口中的 reFresh() 方法进行 Bean的加载,该方法会进行事件的监听注册。具体代码如下: + + * 调用 `initApplicationEventMulticaster()` 方法初始化一个 ApplicationEventMulticaster,默认情况下初始化为 SimpleApplicationEventMulticaster。 + * 调用 `registerListeners()` 方法进行事件监听者的注册。 + +```java +@Override +public void refresh() throws BeansException, IllegalStateException { + synchronized (this.startupShutdownMonitor) { + StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh"); + + // Prepare this context for refreshing. + prepareRefresh(); + + // Tell the subclass to refresh the internal bean factory. + ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); + + // Prepare the bean factory for use in this context. + prepareBeanFactory(beanFactory); + + try { + // Allows post-processing of the bean factory in context subclasses. + postProcessBeanFactory(beanFactory); + + StartupStep beanPostProcess = this.applicationStartup.start("spring.context.beans.post-process"); + // Invoke factory processors registered as beans in the context. + invokeBeanFactoryPostProcessors(beanFactory); + + // Register bean processors that intercept bean creation. + registerBeanPostProcessors(beanFactory); + beanPostProcess.end(); + + // Initialize message source for this context. + initMessageSource(); + + // Initialize event multicaster for this context. + initApplicationEventMulticaster(); + + // Initialize other special beans in specific context subclasses. + onRefresh(); + + // Check for listener beans and register them. + registerListeners(); + + // Instantiate all remaining (non-lazy-init) singletons. + finishBeanFactoryInitialization(beanFactory); + + // Last step: publish corresponding event. + finishRefresh(); + } + + catch (BeansException ex) { + if (logger.isWarnEnabled()) { + logger.warn("Exception encountered during context initialization - " + + "cancelling refresh attempt: " + ex); + } + + // Destroy already created singletons to avoid dangling resources. + destroyBeans(); + + // Reset 'active' flag. + cancelRefresh(ex); + + // Propagate exception to caller. + throw ex; + } + + finally { + // Reset common introspection caches in Spring's core, since we + // might not ever need metadata for singleton beans anymore... + resetCommonCaches(); + contextRefresh.end(); + } + } +} + protected void initApplicationEventMulticaster() { + ConfigurableListableBeanFactory beanFactory = getBeanFactory(); + if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) { + this.applicationEventMulticaster = + beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class); + if (logger.isTraceEnabled()) { + logger.trace("Using ApplicationEventMulticaster [" + this.applicationEventMulticaster + "]"); + } + } + else { + this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory); + beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster); + if (logger.isTraceEnabled()) { + logger.trace("No '" + APPLICATION_EVENT_MULTICASTER_BEAN_NAME + "' bean, using " + + "[" + this.applicationEventMulticaster.getClass().getSimpleName() + "]"); + } + } + } + + protected void registerListeners() { + // Register statically specified listeners first. + for (ApplicationListener listener : getApplicationListeners()) { + getApplicationEventMulticaster().addApplicationListener(listener); + } + + // Do not initialize FactoryBeans here: We need to leave all regular beans + // uninitialized to let post-processors apply to them! + String[] listenerBeanNames = getBeanNamesForType(ApplicationListener.class, true, false); + for (String listenerBeanName : listenerBeanNames) { + getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName); + } + + // Publish early application events now that we finally have a multicaster... + Set earlyEventsToProcess = this.earlyApplicationEvents; + this.earlyApplicationEvents = null; + if (!CollectionUtils.isEmpty(earlyEventsToProcess)) { + for (ApplicationEvent earlyEvent : earlyEventsToProcess) { + getApplicationEventMulticaster().multicastEvent(earlyEvent); + } + } + } +``` + + +由上文代码可见,注册监听者的过程主要可以分为以下三部分: + +* 添加容器中指定的监听器,通常这部分添加的监听器由 Spring 控制; +* 从 BeanFactory 中获取全部实现了 ApplicationListener 接口的 BeanNames,并把其推送给 ApplicationEventMulticaster +* 若有需要立即执行的事件,直接执行这些事件的发布 + + +### 事件发布的流程如下 + +![](image/2023-12-29-16-01-39.png) \ No newline at end of file diff --git a/设计模式/image/2023-12-29-16-01-39.png b/设计模式/image/2023-12-29-16-01-39.png new file mode 100644 index 0000000000000000000000000000000000000000..bc03b21b61d0ba06d6f605111e7b496327ad45a0 GIT binary patch literal 183337 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 e~g4b94-am`e`wd{-5Rhy?H#P&~Nbvg6Bdh&P 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 f?1!lRpuFF(||9A(HFNE>aM&5 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 literal 0 HcmV?d00001