遇寻

China
遇寻
MySQL查询卡死、无返回结果问题解决

MySQL查询卡死、无返回结果问题解决

现象 ①在Navicat中,修改表结构,点击保存,然后发现Navicat卡住,无法正常退出,且MySQL无数据返回。 ②在任务管理器中强制关闭了Navicat后,重复在Navicat中尝试几次,结果仍然一样。 ③在MySQL CLI中进行select查询,同样卡住。 分析 起初认为是网络问题,但是想到可能是被堵塞住了。 解决 查询MySQL中的进程:show processlist。 打开正在进行中的进程列表,发现有Waiting for table metadata lock,所以初步判定是因为某个操作被堵塞,然后后续操作无法执行,从而引起了这个问题。 从网上的资料看来,可能的原因是有未提交事物,阻塞DDL,继而阻塞所有同表的后续操作;结合自己对此数据库的操作,初步认为是在自己的小项目里面,可能存在上述情况。 查看未提交的事务:select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_

MyBatis分页插件PageHelper封装以及遇到的bug

MyBatis分页插件PageHelper封装以及遇到的bug

PageHelper链接:https://github.com/pagehelper/Mybatis-PageHelper项目中使用到了一个注解,叫做PageAble,这是一个对PageHelper的封装注解。这个注解有一个非常显著的问题就是,不能在这个方法里面执行两次SQL查询(原因将在后续中慢慢分析)。使用方法如下: @PageAble public Object method(int page, int size) { 。。。 } 注解的内容比较简单,就是定义了两个参数,分别为这两个参数设置了默认的名字、以及默认值。 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface PageAble { String pageSizeName() default "size"; String pageNumName() default "page"; int pageSize() default 20; int

解决web端登录时等待过久并偶尔抛出事务相关异常

解决web端登录时等待过久并偶尔抛出事务相关异常

问题描述 分析 登录函数中有一个事务,如下: 事务里面有一个有可能操作比较耗时的过程: 在新增登录日志的时候,获取用户的ip。 具体干了啥不重要,重要的是发了一个http请求,并且是串行的,所以这个请求比较耗时的可能是很大的,并且具备不确定性因素。 反思 TransactionRollbackException的文档注释为: This exception indicates that the transaction associated with processing of the request has been rolled back, or marked to roll back. Thus the requested operation either could not be performed or was not performed because further

【转载-摘要】彻底搞懂 Git-Rebase

【转载-摘要】彻底搞懂 Git-Rebase

原文链接:http://jartto.wang/2018/12/11/git-rebase/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io rebase的主要功能就是改变commit历史,在这篇文章中,场景一是改变未push的commit历史,场景二是在合并分支时,改变当前分支的历史,从而达到简化commit历史的目的,让历史一目了然。对强迫症患者来说简直就是福音。 Rebase 场景一:如何合并多次提交纪录? 1.我们来合并最近的 4 次提交纪录,执行: git rebase -i HEAD~42.这时候,会自动进入 vi 编辑模式: s cacc52da add: qrcode

一种基于redis的分布式锁的实现(当前项目中在使用)

主要思想是利用redis执行命令时的单线程特性。 /** * 分布式锁 */ @Component public class DistributedLock { public static final Logger logger = LoggerFactory.getLogger(DistributedLock.class); /** * 加锁默认超时时间 */ private static final long DEFAULT_TIMEOUT_SECOND = 5; /** * 获取所等待的时间 */ private static final long DEFAULT_WAITE_TIMEOUT_SECOND = 5; /** * 加锁循环等待时间 */ private static final long LOOP_WAIT_TIME_MILLISECOND = 30; @Autowired @Qualifier("redisCacheServi