前言 系统框架的防重功能参考了美团 GTIS 解决方案,参考文章 分布式系统互斥性与幂等性问题的分析与解决 GTIS 的实现思路是将每一个不同的业务操作赋予其唯一性。这个唯一性是通过对不同操作所对应的唯一的内容特性生成一个唯一的全局ID来实现的。基本原则为:相同的操作生成相同的全局ID;不同的操作生成不同的全局ID。 生成的全局ID需要存储在外部存…
Springboot 从3.1开始自带的缓存功能,定义了 Cache 和 CacheManager 接口,并且提供了各种实现,如 CaffeineCache、ConcurrentMapCache、RedisCache、RedissionCache 这里通过项目案例来介绍下缓存的实现原理 缓存管理器 Spring Cache 提供的缓存管理为 Cac…
MinIO作为一款基于Golang 编程语言开发的一款高性能的分布式式存储方案的开源项目,有十分完善的官方文档。 文档地址:https://docs.min.io/cn/ 本节介绍下使用 minio 来作为项目的对象存储,想要使用 minio,首先需要搭建 minio 服务,然后在应用端接入 Minio 服务搭建 1panel 的应用商店可以直接安…
java 中也提供了 mai 相关的功能,功能相对较弱,现在也停止了更新,目前 java 应用通常使用第三方库 Jakarta Mail 来实现邮件功能 配置 mail: enabled: false host: smtp.163.com port: 465 # 是否需要用户名密码验证 auth: true # 发送方,遵循RFC-822标准 fr…
mybatis plus 的插件扩展中集成了 p6spy 这是一个 SQL分析的组件 配置 p6spy 的 maven 依赖 <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> </depende…
分页插件配置 前文 MyBatis Plus 配置一文中提到了,在自动装配的时候引入了分页插件,官方提供的默认有如下参数: 属性名 类型 默认值 描述 overflow boolean false 溢出总页数后是否进行处理(默认不处理,参见 插件#continuePage 方法) maxLimit Long 单页分页条数限制(默认无限制,参见 插件…
权限拦截器 DataPermissionInterceptor 是 MyBatis Plus 的一个数据权限插件,支持动态拦截执行 SQl 然后拼接权限部分 SQL片段。 怎么使用呢? 拦截器 PlusDataPermissionInterceptor,这里在查询、修改、删除的操作时做了拦截处理,核心的方式实现了 dataPermissionHan…
common-mybatis.yml 配置 # 内置配置 不允许修改 如需修改请在 nacos 上写相同配置覆盖 # MyBatisPlus配置 # https://baomidou.com/config/ mybatis-plus: # 启动时是否检查 MyBatis XML 文件的存在,默认不检查 checkConfigLocation: fa…
采用 dynamic-datasource 支持世面大部分数据库,通过yml配置即可动态管理异构不同种类的数据库,也可通过前端页面添加数据源 数据库连接池采用 HikariCP Spring官方内置连接池,配置简单,无需写配置类 spring: datasource: type: com.zaxxer.hikari.HikariDataSource…
在验证码获取的入口有这样一个注解 RateLimiter,这个功能是做什么的,怎么实现的呢? /** * 生成验证码 */ @RateLimiter(time = 60, count = 10, limitType = LimitType.IP) @GetMapping("/auth/code") public R<Cap…