![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring
多动手,勤思考
阿布
展开
-
Spring Data JPA 调用save方法异常无法被业务catch捕捉到的原因
近日朋友项目出现了一个问题,就是使用JPA的save方法进行DB保存,即使出现错误,也不希望事务回滚(但是如果这样不应该不加事务注解么?),但是使用过程中发现即使catch住异常,事务依然回滚了,经过调试,调用save方法后根本不走catch代表块,通过debug观察SQL打印时间,发现调用save方法后,并没有出现SQL语句在日志中,而是等业务方法执行完毕后,才打印SQL语句并出现异常,异常则被代理类捕捉了,由于JPA做了很多优化,根据调用save方法不及时打印SQL来看,极有可能是JPA为了节省原创 2021-09-05 15:20:45 · 1944 阅读 · 0 评论 -
Spring consider using ‘getBeanNamesOfType‘ with the ‘allowEagerInit‘ flag turned off, for example.
看下spring说的类,两个类之间发生循环引用了,请在一方的注入属性上添加@Lazy注解。避免循环引用。原创 2021-07-06 18:10:44 · 18221 阅读 · 1 评论 -
spring mybatis mapper Specified class is an interface
这个错误是因为你的项目中有两个相同类名的mapper,但是很有可能spring告诉你的那个mapper并不对,有可能是其他的mapper,每个mapper都全局搜一下。原创 2021-07-06 18:07:05 · 584 阅读 · 0 评论 -
Spring boot gateway网关 Unable to start ServletWebServerApplicationContext due to missing ServletWebSe
场景,某天gateway突然无法启动 Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean经过排查是引用的common包里添加了 spring-webmvc 的jar包,把该jar包排除即可 <dependency> <groupId>com.xxx.xxx</groupId>原创 2020-08-04 15:11:18 · 4247 阅读 · 4 评论 -
Spring (boot) + Redis 实现接口分布式并发锁, 同一个用户同一时间只能访问一次
源代码已上传至github: https://github.com/qiaomengnan16/spring-boot-rest-redis-lock应用场景:例如出现用户领券、抢红包这种高并发的情况下,用户只能抢一次,这时候简单的代码if判断在毫秒级别内无法完全控制住,数据库可能又无法做唯一锁、乐观锁等,这时候可以通过redis来控制。说下思路1. 通过使用redis的setNx命令来做同一时间内唯一并发基础。2. 在接口层面加上锁,这时候考虑采用AOP,进入接口前加锁,结束后释放锁原创 2020-07-06 12:39:17 · 3063 阅读 · 2 评论 -
Spring Web 拦截异常, 封装返回结果并记录入参
异常拦截类 @ControllerAdvice("com.yn.netcafe") @ResponseBody public class GlobalExceptionHandler { // 拦截 ServiceException 异常,并封装返回结果 @ExceptionHandler(ServiceException.class) public BaseResponse serviceExceptionHandler(HttpServletResponse response,原创 2020-07-02 10:06:56 · 481 阅读 · 0 评论 -
@Controller写在private方法上是否生效?为什么?
@Controller写在private方法上是否生效?先说答案: 会。下面说下为什么通过追踪我们可以看到,Spring调用我们定义好的Controller处理方法是通过反射来处理的,反射通过设置method.setAccessible(true); 后,就可以调用私有方法,有兴趣可以自己根据截图上的方法栈追踪一波。...原创 2020-07-01 17:12:27 · 1228 阅读 · 3 评论 -
Transaction rolled back because it has been marked as rollback-only
Transaction rolled back because it has been marked as rollback-only这个错误是因为在Spring中多个方法处于同一事务中,但是有一个方法已经出错了,本该这次线程栈直接出错,但是这个错误往上抛得时候,被也参与在本次事务中得方法try catch住了,这时候程序就没法继续抛出异常,但是程序还是继续往下走得,结束以后程序尝试去提交事务,但是这时候事务已经被spring标记为只能回滚,所以就出了这个错误。我们看下下面的伪代码Rest.java原创 2020-05-13 16:00:16 · 592 阅读 · 0 评论 -
采用logback提供的文件写入方式,对每秒十万左右的数据进行文本快速写入
笔者参与过某线上项目,该项目的数据存储量巨大,大概每秒都有10W左右的数据进行推送过来,项目最初采用的是mysql作为存储,但是以传统型的数据库,这种数据量支撑不了太久,采用分库分表也只是临时方案,最终leader决定用Hadoop + HBase 进行数据存储,但是上面担心某天大数据平台面临崩溃,所以必须同时写入一份文件到txt中,这样作为最后的保障,日后极端问题出现恢复的基础。这种级别的数据...原创 2019-08-11 11:36:07 · 1009 阅读 · 0 评论 -
【线上错误排查】数据库连接池不够用导致的服务集体雪崩
笔者参与了一个产品型项目,流量中等,每天都有很多人在使用,该项目很奇葩,每周六晚上的某个时间段,必定会挂~此时恢复手段就是重启~,事后根据挂掉的日志去进行代码等方面的优化笔者刚参与项目两周左右,因为没有服务器的权限,就向有权限的同事要了一份当时挂掉的日志来查看,发现了80% 左右都是数据库的错误,或者是因为数据库挂掉导致的微服务间调用链失败的错误其中让笔者发现关键错误的一段log,如下Th...原创 2019-08-08 21:57:07 · 3180 阅读 · 0 评论 -
KeyExpirationEventMessageListener Key过期监听事件,服务集群出现的业务问题
项目有个业务场景,到某个时间节点时,固定向用户的公众号发送消息通知~因为时间点不固定所以没有采用定时任务,使用redis的key失效监听器来做,思路就是将key保存的时候,算好当前和那个需要发送通知时候的时间间隔作为key失效时间,这样就可以保证到点实时发送消息了。单机模式下测试推送正常,但是到线上的时候,用户收到了两条推送,原因是因为服务开了集群,key失效的时候每个服务都收到了通知,这...原创 2019-08-08 18:20:06 · 12898 阅读 · 13 评论 -
SpringMvc注入参数开头为什么不区分大小写?
话不多说 直接先上代码package com.mcgx;public class Data { private String sign; public String getSign() { return sign; } public void setSign(String sign) { this.sign = sig...原创 2019-08-02 18:14:06 · 1321 阅读 · 2 评论