关闭代码块移动

Mac 开启了三指拖拽,发现在IDEA的某些Project中,选中代码块时,老是拖动代码。解决办法:

1
Editor –> General -> Enable Drag’n’Drop functionality in Editor 

关闭即可。

利用mybatis标签替换硬编码

建议

利用mybatis标签替换硬编码

背景

在项目中偶尔看到这样的代码:

1
2
3
4
5
6
7
8
9
<sql id="querySqlString">
<where>
1=1
<if test="fundsOrderIdList != null and fundsOrderIdList.size()>0">
and funds_order_id IN
<foreach collection="fundsOrderIdList" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</if>

这段代码中有个1=1很扎眼,这个不是bug,也没有什么性能问题,只是程序员世代传承下来的一个习惯。

阅读更多

命令收藏

mac

关闭SPI(获取根目录写权限)

  • 重启 command+R 进入恢复界面
  • 实用工具 - 终端 输入:csrutil disable
  • 重启:reboot
  • 打开终端,挂载根目录:sudo mount -uw /
阅读更多

常见集群方式

主从(master-slave)

写master,同步到slave 。slave可用于读。常见mysql,redis。

哨兵

在主从的基础上,添加了master宕机时,slave自动切换为master。

cluster

集群内每个节点都是分片。通过分布式一致性协议沟通。

例如redis,通过Gossip 协议,在集群内同步,各个分片的哈希槽信息。

便于重定向请求。

RocketMQ RMQ_SYS_TRANS_HALF_TOPIC 爆掉的问题

现象

SaaS项目东郭反应,项目中发的事务消息一直在RMQ_SYS_TRANS_HALF_TOPIC中,并且不断增长。随即我们查看RocketMQ日志发现如下情况:

这个本来是RocketMQ正常的逻辑,发送事务消息后没有提交状态的话,当达到超时时间后,RocketMQ会回查本地事务状态。这里显示的是回查的次数超限,消息被移到了TRANS_CHECK_MAXTIME_TOPIC中。

不正常的是REAL_TOPIC变成了RMQ_SYS_TRANS_HALF_TOPIC,正常应该是原始的业务消息TOPIC才对。于是我们带着这个问题开始排查起来。

阅读更多

tk.mybatis与Activiti共存问题解决

由于tk.mybatis依赖了persistence-api,会让Activiti装配JpaProcessEngineAutoConfiguration,因为其@conditonalOnclass(name = “javax.persistence.EntityManagerFactory”)。

但实际没有使用JPA,导致启动报错。如果排除persistence-api,又会导致tk.mybatis报错。

参考了一番其它的人做法,无论是各种排除还是添加依赖都无效。

最终自己的解决方案是:

首先排除activiti jpa的自动装配:

1
@SpringBootApplication(exclude={JpaProcessEngineAutoConfiguration.class})。

然后找到activiti中的DataSourceProcessEngineAutoConfiguration.class 复制出源码,在自己的项目中添加一个同名文件(不同名也行)。然后粘贴内容到新建的文件中。最后删掉:

1
@ConditionalOnMissionClass(name = "javax.persistence.EntityManagerFactory")

Ok,搞定!

被隔离的第7天

被隔离的第7天,每天接到无数个部门的电话,量体温,报情况。

PriorityQueue解析

本文转载至github:https://github.com/CarpenterLee/JCFInternals/blob/master/markdown/8-PriorityQueue.md

PriorityQueue

总体介绍

前面以Java ArrayDeque为例讲解了StackQueue,其实还有一种特殊的队列叫做PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器Comparator,类似于C++的仿函数)。

阅读更多