随笔分类 - 项目
摘要:前言 之前项目中使用的唯一ID生成方式为雪花算法,但是该方式存在“需要动态分配机器标识”和”时钟回拨“的问题,且解决起来比较复杂,所以考虑切换实现方式为数据库号段,该方式参考美团开源的项目Leaf。具体原理为 每个服务实例第一次从数据库加载一个号段放到内存中,比如第一个实例1-1000,第二个实例1
阅读全文
摘要:问题描述 在使用tk提供的InsertMapper的insert方法时,不会将自增ID回写到记录中。 问题复现 maven依赖 <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</art
阅读全文
摘要:前言 雪花算法的构成为 第一位固定为0,表示正数 41位表示时间戳,一共可以使用69年 5位表示数据中心节点,5位表示机器标识,一共可以支持1024个节点 12位表示一毫秒内的序列号,共4096个 如果多个服务实例使用的数据中心和机器标识都一样,那么在高并发情况下会生成重复的ID,这个问题是很严重的
阅读全文
摘要:问题描述 使用 rabbitmq_delayed_message_exchange 插件时,ReturnCallback 会被强制触发,错误码302,错误信息为NO_ROUTE。 问题复现 spring配置如下 spring.rabbitmq.host= spring.rabbitmq.port=
阅读全文
摘要:数据准备 @RestController @RequestMapping("/api") @Slf4j public class HealthController { @GetMapping("/health") public String health(@RequestBody TestVO te
阅读全文
摘要:数据准备 定义一个AOP拦截器来打印日志,在接口执行完和执行抛异常时都会打印 @Slf4j @Aspect @Component public class ApiLogAspect { @Around("@annotation(com.imooc.ApiLog)") public Object do
阅读全文
摘要:示例代码 自定义的RedisTemplate,核心序列化器为GenericJackson2JsonRedisSerializer,其中使用了 jackson 来将对象转为 json 字符串。 import org.springframework.data.redis.connection.Defau
阅读全文
摘要:前言 我们可以使用 explain 命令来查看 SQL 语句的执行计划,从而帮助我们优化慢查询。 使用 注意:使用的 mysql 版本为 8.0.28 数据准备 CREATE TABLE `tb_product2` ( `id` bigint NOT NULL AUTO_INCREMENT COMM
阅读全文
摘要:前言 随着企业内部各种开源平台越来越多,例如:gitlab、Jenkins、JumpServer、Rancher等,账号维护变成一件繁琐的事情,这时需要一个统一账号维护的平台,每人只需一个账号,在公司内部平台通用。而大多数开源平台都支持 LDAP,因此只要搭建好 LDAP 服务,将企业内部这些平台都
阅读全文
摘要:前言 在使用 MySQL 时,若表中含自增字段(auto_increment 类型),则向表中 insert 一条记录后,可以调用 last_insert_id() 来获得最近 insert 的那行记录的自增字段值。但事实上,使用 last_insert_id() 时有很多注意事项,很容易踩到坑。
阅读全文
摘要:前言 replace into 跟 insert into 功能类似,不同点在于:replace into 首先尝试插入数据到表中 如果发现表中已经有相同的数据(根据主键或者唯一索引判断)则先删除原来的数据,然后插入新的。 否则,直接插入新数据。 注意:插入数据的表必须有主键或者是唯一索引!否则的话
阅读全文
摘要:前言 OpenAPI阶段的Swagger也被称为Swagger 3.0。在Swagger 2.0后,Swagger规范正式更名为OpenAPI规范,并且根据OpenAPI规范的版本号进行了更新。因此,Swagger 3.0对应的就是OpenAPI 3.0版本,它是Swagger在OpenAPI阶段推
阅读全文
摘要:问题1 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestLogger { private static Logger logger = LoggerFactory.getLogger(TestLogg
阅读全文
摘要:测试controller @RestController @RequestMapping("/test") @Slf4j public class TestController { @GetMapping("/testStringParamTrim") public TestObjectInfo t
阅读全文
摘要:前言 BeanPostProcessor 是 Spring 提供的一种扩展机制,可以让我们在 bean 初始化前后做一些额外的操作,Spring 中的 @Async,@Scheduled,@RabbitHandler 等注解的底层实现都是 BeanPostProcessor 在起作用,如 Rabbi
阅读全文
摘要:代码示例 @Configuration public class AspectConfig { @Aspect @Component @Order(Ordered.HIGHEST_PRECEDENCE) public static class LogAspect { @Pointcut("execu
阅读全文
摘要:问题描述 在项目中有一个 MySQL 数据库归档程序,每天会定时跑,在归档逻辑中,会涉及到对大表的查询(根据创建时间查询,它是索引),这个过程中会锁数据(行级锁),然后我们插入新的数据就会报错:获取锁超时 Caused by: com.mysql.cj.jdbc.exceptions.MySQLTr
阅读全文
摘要:问题描述 支付宝互联网地址为 https://openapi.alipay.com/gateway.do,专线相比于互联网地址速度更快,更加稳定。这里我们假设专线地址为 https://xxx.xxx.xxx.xxx:443/gateway.do。 我们通过支付宝的 SDK 来访问支付宝专线地址,结
阅读全文
摘要:问题描述 boostrap.yml 配置如下 spring: application: name: cnblogs cloud: nacos: config: server-addr: http://ip:8848 namespace: d8b0df04-aa58-4a5b-b582-7d133b9
阅读全文
摘要:前言 在项目最好不要通过程序修改 nacos 配置,这样比较危险,如果代码有问题或者将其他的配置给覆盖了,可能会造成生产事故。需要频繁修改的配置信息最好存储到数据库。 修改 yaml 类型的配置 bootstrap.yaml 配置 spring: application: name: cnblogs
阅读全文

浙公网安备 33010602011771号