java
尚凯辉的博客
坚持终身学习!
展开
-
使用redisson实现延迟队列
文章目录引入maven延迟队列最佳实践引入maven <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.13.3</version> </dependency>延迟队列最佳实践首先定义一个延迟job,里面包含原创 2020-09-08 13:49:19 · 753 阅读 · 0 评论 -
终于搞懂了SpringBoot jar包启动的原理
SpringBoot生成的jar包Spring Boot的可执行jar包又称作“fat jar”,是包含所有三方依赖的jar。它与传统jar包最大的不同是包含了一个lib目录和内嵌了web容器。可执行jar包的目录结构通过maven命令打包后,会有2个jar包,一个为application-name.version-SNAPSHOT.jar,一个为application-name.version-SNAPSHOT.jar.original。后者仅包含应用编译后的本地资源,而前者引入了相关的第三方依赖。原创 2020-09-04 15:47:04 · 6919 阅读 · 0 评论 -
分库分表总结
文章目录什么是分库分表为什么要分库分表分库分表的优缺点分库分表的方案水平分库水平分表垂直分库垂直分表分库分表工具分库分表步骤分库分表的问题非Shard key的查询问题非Shard key跨库跨表分页查询问题扩容问题扩容和部署的问题事务问题跨节点Join的问题ID的问题跨分片的排序分页聚合的问题分库的数量总结什么是分库分表从字面上简单理解,就是将原本存储在一个库的数据分块存储在多个库上,将原本存储在一个表的数据分块存储在多个表里面。为什么要分库分表分库分表的目的就是为了缓解数据库的压力,最大限度提高原创 2020-07-28 16:28:01 · 218 阅读 · 0 评论 -
Springboot-事件驱动详解
文章目录spring事件驱动组成定义事件发送事件:publishEvent()方法实现观察者有2种方式注意事项利用@TransactionalEventListener实现监听事件时的事务隔离spring事件驱动组成spring事件驱动由3个部分组成1、ApplicationEvent:表示事件本身,自定义事件需要继承该类。用来定义事件2、ApplicationEventPublisherAware:事件发送器,需要实现该接口。主要用来发布事件.ApplicationContext 也实现了该接口,原创 2020-07-22 18:53:48 · 2400 阅读 · 0 评论 -
设计模式-观察者模式
文章目录定义介绍角色类图实例定义当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。介绍**意图:**定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。**主要解决:**一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。**何时使用:**一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到原创 2020-07-22 16:34:43 · 114 阅读 · 0 评论 -
常用hutool和guava的集合工具类总结
Maven <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0-jre</version> </dependency> <depende原创 2020-06-05 16:02:18 · 7161 阅读 · 1 评论 -
常用工具类的集合方法总结
Collections1.反转指定列表中元素的顺序 public static void reverse(List<?> list)2.随机排列集合public static void shuffle(List<?> list)3.交换指定位置的集合 public static void swap(List<?> list, int i, int j)4.用指定的元素替换指定列表中的所有元素public static <T> void f原创 2020-06-02 17:52:13 · 1394 阅读 · 0 评论 -
重试机制实现总结
原生方法@Overridepublic String helloRerty(String msg) throws InterruptedException { int times = 0; while (times < 3) { try { if (msg.equals("error")) { throw new RuntimeException("error"); }原创 2020-06-01 22:07:45 · 1244 阅读 · 0 评论