责任链(Chain)
提示
责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止
在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的处理者解耦了
提示
责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止
在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的处理者解耦了
提示
记录工作中遇到到 Seata 全局事务不回滚的问题
在工作中遇到需要调用其他服务接口,由于项目结构问题,没有使用其他的框架去调用接口,而是自己写 HTTP 请求接口调用
当我们复杂一个对象时,这个对象可以是内建数据类型,数组,结构体,map……我们在复制结构体的时候,当我们需要比较两个结构体中的数据是否相同时,我们需要使用深度比较,而不是只是简单地做浅度比较。这里需要使用到反射 reflect.DeepEqual()
,下面是几个示例
import (
"fmt"
"reflect"
)
type data struct {
}
func main() {
v1 := data{}
v2 := data{}
fmt.Println("v1 == v2:",reflect.DeepEqual(v1,v2))
//prints: v1 == v2: true
m1 := map[string]string{"one": "a","two": "b"}
m2 := map[string]string{"two": "b", "one": "a"}
fmt.Println("m1 == m2:",reflect.DeepEqual(m1, m2))
//prints: m1 == m2: true
s1 := []int{1, 2, 3}
s2 := []int{1, 2, 3}
fmt.Println("s1 == s2:",reflect.DeepEqual(s1, s2))
//prints: s1 == s2: true
}
提示
需要在 branch B 分支上修改代码, 发现不小心在 branch A 分支下进行了修改, 又不想在branch B上重新修改一遍代码,那么就可以用到 git stash(暂存) 命令了
# 暂时存储现在的操作
git stash
# 查看暂存列表
git stash list
# 恢复暂存操作
git stash pop
# 删除暂存操作
git stash drop
# 删除所有暂存的操作
git stash clear
在使用 Mac 系统启动 SpringBoot 项目时,切换到 JDK8 发现启动超级慢,切换回 JDK12 又不会这样,后来才发现是MacOS 使用 Java8 的时候都会出现获取主机名会出现这个时间超长的问题
系统环境
- macOS Catalina 10.15.4
- JDK版本 - 1.8.0.292
打开终端输入 hostname
,查看你的mac的主机名称,把它给复制下来
修改 /etc/hosts文件
,大家应该都知道这个文件是做什么的
没修改前应该是这个样子
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
修改后
##
127.0.0.1 localhost macBook-Pro.local
255.255.255.255 broadcasthost
::1 localhost macBook-Pro.local
macBook-Pro.local
即是前边复制下的主机名
好了,再运行项目就可以了, 只有在 JDK8 才会出现该问题,在 JDK11 正常。
OpenFeign是声明式的Http客户端,通过OpenFeign发送Http请求非常的简单
Feign 和 OpenFeign 的区别
Feign 和 OpenFeign是两个技术,都是作为服务调用存在的,OpenFeign 是SpringCloud在Feign的基础上进行封装得到的,支持SpringMvc的注解
MongoDB通过使用$near
,$within
,geoWithin
和$nearSphere
等运算符支持地理空间查询。Criteria
类提供了特定于地理空间查询的方法。还有一些形状类(Box
,Circle
和Point
)与地理空间相关的Criteria
方法结合使用
@Document(collection="newyork")
public class Venue {
@Id
private String id;
private String name;
private double[] location;
@PersistenceConstructor
Venue(String name, double[] location) {
super();
this.name = name;
this.location = location;
}
public Venue(String name, double x, double y) {
super();
this.name = name;
this.location = new double[] { x, y };
}
public String getName() {
return name;
}
public double[] getLocation() {
return location;
}
@Override
public String toString() {
return "Venue [id=" + id + ", name=" + name + ", location="
+ Arrays.toString(location) + "]";
}
}
开发环境配置如下👇
框架 | 版本 |
---|---|
SpringBoot | 2.5.4 |
mongodb | 5.0.2 |
spring-boot-starter-data-mongodb | 2.5.4 |
本文介绍 mongodb 的安装,使用的版本是 5.0.2
框架 | 版本 |
---|---|
mongodb | 5.0.2 |
MongoDB提供了可用于32位系统和64位系统的预编译二进制包(新版本没有了32位系统的安装文件),你可以进入MongoDB官网下载安装,MongoDB的预编译二进制包的下载地址为:https://www.mongodb.com/download-center/community,打开之后会看到如下图,直接点击Download下载即可,也可以在 Version 中选择你想要的版本:
前面,我们已经学习了 Elasticsearch 的基本 API 的操作,也在 SpringBoot 中集成了 Elasticsearch,使用 Repository 接口实现简单的 Crud 操作
因为 旧版本的 Repository 中的 search 方法被废弃了,所以我们要实现 复杂查询 只能使用 ElasticsearchRestTemplate
对象 | 描述 |
---|---|
NativeSearchQueryBuilder | Spring提供的一个查询条件构建器,帮助构建json格式的请求体 |
QueryBuilders | 提供了大量的静态方法,用于生成各种不同类型的查询对象,例如:词条、模糊、通配符等QueryBuilder对象 |
BoolQueryBuilder | 多条件查询对象,对应 Elasticsearch 中的 bool |
MatchQueryBuilder | 构建分词查询条件对象,对应 Elasticsearch 中的 match |
PageRequest | 用于构建分页请求 |
IndexCoordinate | 索引对象,通常在查询使用 |