跳至主要內容

Zenghr

——「」

友人帐
(●´∀`●)ノ
荒腔走板
~~~~~~
行为型 - 责任链模式(Chain)

责任链(Chain)

提示

责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止

在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,请求会自动进行传递。所以责任链将请求的发送者和请求的处理者解耦了


Zenghr大约 3 分钟设计模式设计模式
Seata 全局事务不生效问题

Seata 全局事务不生效问题

提示

记录工作中遇到到 Seata 全局事务不回滚的问题

开发环境

  • Spring Boot
  • Seata 分布式事务解决方案

实际场景

在工作中遇到需要调用其他服务接口,由于项目结构问题,没有使用其他的框架去调用接口,而是自己写 HTTP 请求接口调用


Zenghr大约 2 分钟JavaJava
深度比较-DeepEqual

当我们复杂一个对象时,这个对象可以是内建数据类型,数组,结构体,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
}


Zenghr小于 1 分钟golanggolang
git stash 提交当前修改到其他分支

git stash 提交当前修改到其他分支

提示

需要在 branch B 分支上修改代码, 发现不小心在 branch A 分支下进行了修改, 又不想在branch B上重新修改一遍代码,那么就可以用到 git stash(暂存) 命令了

命令相关的操作

# 暂时存储现在的操作
git stash
# 查看暂存列表
git stash list
# 恢复暂存操作
git stash pop
# 删除暂存操作
git stash drop
# 删除所有暂存的操作
git stash clear

Zenghr小于 1 分钟
Mac安装JDK8启动项目慢解决方案

Mac安装JDK8启动项目慢解决方案

在使用 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 正常。


Zenghr小于 1 分钟
OpenFeign 2020 最新教程

OpenFeign 2020 最新教程

OpenFeign是声明式的Http客户端,通过OpenFeign发送Http请求非常的简单

  • 注解式开发,接口+注解的方式
  • OpenFeign支持多种的对象的序列化 和 反序列化的工具
  • OpenFeign 默认集成了Ribbon(2020 版本弃用),可以直接进行负载均衡

Feign 和 OpenFeign 的区别

Feign 和 OpenFeign是两个技术,都是作为服务调用存在的,OpenFeign 是SpringCloud在Feign的基础上进行封装得到的,支持SpringMvc的注解


Zenghr大约 7 分钟SpringSpringCloud
Mongo-地理空间查询

Mongo-地理位置查询

MongoDB通过使用$near$withingeoWithin$nearSphere等运算符支持地理空间查询。Criteria类提供了特定于地理空间查询的方法。还有一些形状类(BoxCirclePoint)与地理空间相关的Criteria方法结合使用

演示类 Venue

@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) + "]";
  }
}

Zenghr大约 2 分钟
Mongo-SpringBoot集成

Mongo 集成 SpringBoot

开发环境配置如下👇

框架 版本
SpringBoot 2.5.4
mongodb 5.0.2
spring-boot-starter-data-mongodb 2.5.4

Zenghr大约 3 分钟
Mongo-安装教程

Mongo 安装教程

本文介绍 mongodb 的安装,使用的版本是 5.0.2

框架 版本
mongodb 5.0.2

mongodb 下载

MongoDB提供了可用于32位系统和64位系统的预编译二进制包(新版本没有了32位系统的安装文件),你可以进入MongoDB官网下载安装,MongoDB的预编译二进制包的下载地址为:https://www.mongodb.com/download-center/community,打开之后会看到如下图,直接点击Download下载即可,也可以在 Version 中选择你想要的版本:


Zenghr大约 4 分钟
Elasticsearch-复杂查询

Elasticsearch 复杂查询

前面,我们已经学习了 Elasticsearch 的基本 API 的操作,也在 SpringBoot 中集成了 Elasticsearch,使用 Repository 接口实现简单的 Crud 操作

因为 旧版本的 Repository 中的 search 方法被废弃了,所以我们要实现 复杂查询 只能使用 ElasticsearchRestTemplate

查询条件对象

对象 描述
NativeSearchQueryBuilder Spring提供的一个查询条件构建器,帮助构建json格式的请求体
QueryBuilders 提供了大量的静态方法,用于生成各种不同类型的查询对象,例如:词条、模糊、通配符等QueryBuilder对象
BoolQueryBuilder 多条件查询对象,对应 Elasticsearch 中的 bool
MatchQueryBuilder 构建分词查询条件对象,对应 Elasticsearch 中的 match
PageRequest 用于构建分页请求
IndexCoordinate 索引对象,通常在查询使用

Zenghr大约 9 分钟
2
3
4
5
...
7