Loading

摘要: 背景简介 当某一个特定事件或动作发生以后,需要执行很多联动动作,如果串行去执行的话太耗时,如果引入消息中间件的话又太重了;这是我们可能想到了观察者模式,但是如何以最简单的方式实现呢,借助spring这个强大的工具,我们可以很容易利用事件和监听器实现。 使用Spring优雅实现 观察者模式定义对象间的 阅读全文
posted @ 2021-02-09 13:36 Philosophy 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 多数据源事务控制 背景 最近遇到了一个多数据源事务的同步问题,业务模型很简单,就是读取A数据库的数据,然后根据一定的映射规则插入到B数据库中,但是要保证从A数据库同步的数据到B数据库的数据和A完全一样。这样就需要有事务的控制。但是Spring的声明式事务只能控制单个数据库的事务问题,而由于系统中这块 阅读全文
posted @ 2021-01-25 11:54 Philosophy 阅读(2713) 评论(0) 推荐(0) 编辑
摘要: 前面写到了通过实现mybatis提供的org.apache.ibatis.plugin.Interceptor接口实现了打印SQL执行时间,并格式化SQL及其参数,如果我们使用的是ssm还得再配置文件中添加一小段配置,如果使用的是Springboot,也得把bean注入到spring的IOC容器中。 阅读全文
posted @ 2021-01-09 21:36 Philosophy 阅读(572) 评论(0) 推荐(0) 编辑
摘要: 背景 背景:在并发读写的时候,数据明明已经成功写入数据库之中,但是我们从缓存中读出的数据还是以前的旧数据,开始以为是浏览器缓存的问题,清了浏览器缓存之后还是没有。那可能是数据还没有同步到缓存中,按照代码逻辑这有点不太可能呀!虽然不可能,那我们还是等等看吧。等了一段时间之后,数据显示的还是旧数据。还是 阅读全文
posted @ 2020-12-17 20:16 Philosophy 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 背景:由于业务需求,用户想要统计每周,每月,几个月,一年之中的前N条数据。 根据已有的思路无非就是对全部的数据进行排序,然后取出前N条数据,可是这样的话按照目前最优的排序算法复杂度也在O(nlog(n)),而且如果把所有的数据都放到内存之中排序,数据量太大的话可能不仅仅是慢,还可能因为占用内存过大而 阅读全文
posted @ 2020-12-16 17:17 Philosophy 阅读(595) 评论(0) 推荐(0) 编辑
摘要: 第一步,打出带有jar包的SpringBoot工程 首先配置pom.xml文件 <build> <finalName>demo</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId 阅读全文
posted @ 2020-12-15 19:55 Philosophy 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 打印SQL的执行时间,我们可以实现mybatis官方我们提供的接口org.apache.ibatis.plugin.Interceptor,我们可以拦截的类有多个Executor,StatementHandler,ParameterHandler等,第一次写拦截的时候选择了Executor,但是我发 阅读全文
posted @ 2020-12-08 13:44 Philosophy 阅读(956) 评论(0) 推荐(0) 编辑
摘要: ThreadPoolExecutor全部参数的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable 阅读全文
posted @ 2020-12-06 16:54 Philosophy 阅读(777) 评论(2) 推荐(0) 编辑
摘要: 类注释原文:Basic thread blocking primitives for creating locks and other synchronization classes.意思就是LockSupport类用于创建锁和其他同步类的基本线程阻塞原语。 LockSupport是基于Unsafe 阅读全文
posted @ 2020-12-06 12:04 Philosophy 阅读(720) 评论(0) 推荐(0) 编辑
摘要: 最近看到责任链模式的时候每增加一个处理类,就必须在责任链的实现类中手动增加到责任链中,具体代码基本就是list.add(new FilterImpl()),可以看到每次增加一个处理类,就必须添加一行上面的代码,不符合开闭原则(面向修改关闭,面向扩展开放)。于是想到了Java的SPI机制,可以实现插拔 阅读全文
posted @ 2020-12-03 00:58 Philosophy 阅读(613) 评论(0) 推荐(0) 编辑