记录一些工作中的设计模式实践

待办列表场景

在一个复杂的系统中,必然有很多业务模块都需要展示给用户待办列表,尤其是在 toB 的系统中,有着相当多的审批之类的业务。

这些业务模块分散在系统各处,但是需要统一的待办列表展示。

阅读更多

从Flowable流程引擎聊一聊如何动态修改Spring中的BeanDefination

前言

最近在给一个项目整合Flowable流程引擎,跑起来很顺利。为了便于维护,将业务用的数据库和Flowable用的数据库分离。根据文档,很容易就能实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Component
public class FlowableConfig implements EngineConfigurationConfigurer<SpringAppEngineConfiguration> {

private final DataSource dataSource;

public FlowableConfig(@Qualifier("flowableDataSource") DataSource dataSource) {
this.dataSource = dataSource;
}

@Override
public void configure(SpringAppEngineConfiguration engineConfiguration) {
engineConfiguration.setDataSource(dataSource);
}

}
阅读更多

Spring Cloud Gateway的CORS配置

前言

最近在学习SpringCloud,配置CORS策略的时候遇到了问题。当接口被鉴权框架SaToken拦截的时候,浏览器里拿不到返回的响应,同时控制台报错CORS响应头未配置。但是当鉴权通过时,CORS响应头则是正常的。

原因分析

阅读更多

记一次数据库更新丢失问题以及解决方案

前言

最近在项目中出现了更新数据库偶尔更新丢失的情况,表现为SQL执行成功,没有任何报错,在同一事务中查询保存后的记录,没有任何问题,然而查看数据库记录却没有更新。重点是这种情况并不是稳定发生的,有时能够更新成功,又是却会更新丢失。

原因

阅读更多

关于一次MybatisPlus自动配置失效

今天在项目中配置了动态数据源,但是在引入了MybatisPlus后启动项目,却发现所有Mapper和SqlSession等等Bean没有被自动注入到容器中,猜测是自动配置失效,查看源码后发现MybatisPlusAutoConfiguration自动配置类上有注解@ConditionalOnSingleCandidate(DataSource.class),即在容器中只有一个DataSource候选Bean是才会启用自动配置,而我手动在容器中注入了一个主数据源和一个动态数据源,导致自动配置失效。并且由于将主数据源设为了动态数据源的默认数据源,所以最好的解决方案是在动态数据源上添加@Primary注解,让容器优先选择动态数据源

Android解决恢复应用数据后FCM推送失效

前言

刷机并恢复应用数据后发现所有恢复的应用的FCM推送都失效了,原因是应用注册的FCM信息是之前系统的,与当前系统不兼容,解决方案就是重新注册FCM

具体操作

阅读更多

Golang Echo框架实现API统一返回格式

Golang的Echo框架中,上下文echo.Context是一个接口,可以通过它重写默认的Context.JSON方法来自定义返回格式

首先定义一下接口的格式

1
2
3
4
type CommonResponse struct {
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
阅读更多

spring mvc统一API返回格式

对于前后端分离的项目,采用统一的返回格式可以有效减少前后端开发人员的交流成本,对于Spring MVC可以利用切面无侵入地、优雅地实现这一点。

Spring MVC提供了AbstractMappingJacksonResponseBodyAdvice抽象类对返回的JSON做二次处理

首先定义返回结构

阅读更多

Xray指定出口IP用WARP的IPv4解锁流媒体

前言

通常我们用Cloudflare WARP通过替换VPS的双栈或单栈网络来通过获得所谓“原生IP”,从而解锁Netflex等流媒体,而如果直接替换掉双栈网络会导致VPS失联,即使通过修改路由表正常使用也会影响到Docker等应用的NAT。实际上我们只需要让Xray的流量走WARP接口出去就行了,outbounds配置提供了sendThrough用来指定出口IP,streamSettings.sockopt.mark用来设置fwmark。我之前直接指定为WARP的IP发现并不行,收不到回包(实际上如果直接指定接口名就正常使用了,可惜不支持)。在翻Xray的文档时才发现还需要配置一下路由表才行。

使用sendThrough

阅读更多