
工作填坑记
文章平均质量分 86
主要记录工作中的采坑以及解决方案
KingdomCoder
技术发烧友
展开
-
Spring Security Oauth2源码BUG认证并发用户身份信息混乱问题
1.背景:随着业务的增长,线上系统qps越来越高,起初市场同事和客户偶尔会反馈用户看到的信息出现的不是自己的信息,但是重新刷新之后就好了,当时我们就对这个问题进行分析,但是都是无疾而终,没有找到问题所在,随着用户增长的基数越来越大,出现这个问题的现象也就更加频繁,所以我们团队对于这个线上事故就非常重视,开始对于整个请求链路分析,我们用户端使用的是一款我们自研的客户端,当时我们分析出来可能存在的几个原因:同一个客户端,不同用户登录,本地缓存的token混乱。客户端因为某种特定场景下拿到了别人的toke原创 2021-04-15 21:57:13 · 2166 阅读 · 3 评论 -
Spring项目中干掉if-elese,写出优雅代码
1.背景:在项目经常会遇到因为不同的条件执行不同的方法,当类型比较多的情况下,代码维护起来比较痛苦,并且会有大量的if-else判断。这样不管是后期的需求迭代还是别人接手代码,那都是相当的自闭。。。2.反面教材:首先我们先看下面一段代码,这边采用大量的状态if else 判定 if ("AType".equals(tier)) { Map<String, Object> mapPar = new HashMap<String, Object>(); mapPar.put(原创 2020-12-27 19:37:29 · 400 阅读 · 0 评论 -
dmesg命令查看java程序突然挂掉的原因
背景:JAVA服务线上毫无征兆的直接crash掉,打开日志查看,日志文件毫无相关挂掉的信息,所以当时直接选择了重启,当时的猜测是:服务内存不足导致程序进程直接挂掉?查找原因后来学习查找到一个命令dmesg命令,这个命令还是非常强大的。dmesg命令行实用程序用于在Linux和其他类似Unix的操作系统中打印和控制内核环形缓冲区。对于检查内核启动消息和调试与硬件相关的问题很有用。可以在服务器执行命令:# 按时间格式显示dmesg -T# 显示跟java 有关的日志dmesg -T |.原创 2020-07-19 13:50:50 · 3077 阅读 · 1 评论 -
线程并发redisson使用遇到的坑
背景因为业务上的一个购买需求,需要对库存进行行程保护,防止超卖的出现(我们不是电商公司),经过调研,最终选择使用Redission来进行控制。主要因为Redission丰富的API,开源框架,已经被广泛应用于实际生产环境。...原创 2020-06-01 23:00:01 · 11431 阅读 · 6 评论 -
Spring自定义argumentResolver参数解析器从原理到实战
背景在web程序中,一个HTTP请求进来时,会被容器处理进而转换成一个servlet请求。http请求所携带的数据,虽然是格式化的但是无类型;而java作为强类型语言,同时为了健壮性考虑,必然要有完善的类型约束。那么,将数据从servlet请求中转换到java中,一个很原始的方式是手动处理。幸好,Spring MVC通过以注解往函数添加额外信息的方式,使得上述的数据转换过程能够交由框架自动处理。从一个角度去看,Controller中的函数声明及注解定义了此HTTP请求的数据格式和类型,也即规定了对外部.原创 2020-05-16 11:01:27 · 2542 阅读 · 0 评论 -
SpringMybatisPlus+ DynamicDataSource自定义封装
背景:产品已经上线,目前为了更好的查看线上数据,所以计划开发一套boss运营系统,供内部人员使用,boss系统需要建自己的一套数据表数据结构,初期本来想跟业务表放在一起,但是思前想后,Boss系统表结构和业务数据放在一个数据库不是很合理,所以前期采用动态数据源选择来加载或者操作合法数据。实现过程:1.编写application.yml --> mybatisplus配置,mysql多数据源配置。spring: application: name: @spring.app.原创 2020-05-16 10:52:40 · 1261 阅读 · 0 评论 -
Seata初试采坑
背景:公司采用dubbo的分布式服务,现在业务上遇到了分布式事物的问题,和同事讨论改过几个分布式的开源框架,最终采用了seata,seata的性能相对比较客观,但是回滚情境下,性能下降特别厉害,这个与seata的网络IO和数据IO多次交互相关。具体各种分布式事物管理的开源框架推荐一篇文章可以参考:“若干分布式事务框架”与“我的偏见”( 测试/分析),此处我们部署搭建是最新的1.1.0版本。采坑...原创 2020-03-13 15:14:54 · 9891 阅读 · 8 评论 -
NGINX的配置问题
坑一 . 静态文件服务器时:location root和alias的区别:root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上:root的处理结果是:root路径+location路径alias的处理结果是:使用alias路径替换location路径alias是一个目录别名的定义,root则是最上层目录的定义。...原创 2020-01-17 14:29:04 · 169 阅读 · 0 评论 -
线上CPU100%的排查思路
假设,服务器上部署了若干Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。如何定位是哪个服务进程导致CPU过载.哪个线程导致CPU过载,哪段代码导致CPU过载?简要步骤如下:(1)找到最耗CPU的进程;(2)找到最耗CPU的线程;(3)查看堆栈,定位线程在干嘛,定位对应代码;步骤一、找到最耗CPU的进程工具:top方法:执行top -c,显示进程运行信息列表...原创 2020-01-17 14:25:30 · 299 阅读 · 1 评论 -
RocketMQ消息顺序发送和消费问题
事故现场分析:由于创新业务产品上线,运营产品想通过一些活动来刺激用户,采用注册邀请机制即可获取积分的相关活动。考虑到后续可能还有其他可能的活动来发放积分,所以设计的时候,采用mq消息模式发放积分,异步解耦,并能够保证数据的最终一致性。考虑到用户积分计算的时候可能存在并发操作的情况,想到两种解决方案:1.采用分布式锁的方式,计算用户积分,同一个用户操作时保持同步处理2.采用队列的先天优势,FI...原创 2020-01-17 14:24:29 · 929 阅读 · 3 评论 -
SpringBoot以jar启动The temporary upload location[xxxx]is not valid
场景还原:新项目为了满足运营人员使用搭建的Boss系统,采用了SpringBoot2.0,并以Jar包的形式启动,第一次上线测试,完全正常,由于春节时隔10几天没有人登录过,后来同事反应登录的时候就报错了,查看日志信息:message:Failed to parse multipart servlet request; nested exception is java.io.IOExcepti...原创 2020-01-17 14:22:39 · 246 阅读 · 0 评论 -
SpringBoot2.0之Security-Oauth2配置踩坑+源码分析
最近使用SpringBoot2.0新版构建项目,新版的SpringBoot相关依赖的jar很多包结构做了变更,相关依赖也有很多不同,本人负责公司的基础服务,相关登录认证,资源认证采用了开源的 Spring-Security-Oauth2来构建,但是构建过程中会遇到很多坑,所以做此记录。坑一:Spring boot 2.0.X引用的security 依赖是 spring security 5....原创 2020-01-17 14:11:46 · 1541 阅读 · 0 评论 -
SpringSecurity升级Token序列化异常踩坑
踩坑场景:公司最近做技术架构的改造,并将原SpringBoot1.5.6版本升级为2.0.6,并逐渐将内部服务调用dubbo协议逐渐转换为SpringCloud的Feign调用,前期主要对SpringBoot版本进行升级。通过<dependencyManagement> <dependencies> <dependency> ...原创 2020-01-17 14:10:04 · 1365 阅读 · 0 评论 -
dubbo注册服务IP解析异常
服务启动时会卡住一会,然后异常输出:[DUBBO] Could not get local host ip address, will use 127.0.0.1 instead., dubbo version: 2.6.2, current host: 127.0.0.1报错源码NetUtils: private static InetAddress getLocalAddress0()...原创 2020-01-17 14:08:14 · 691 阅读 · 1 评论 -
spring-boot框架dubbo注解@Reference注入service,调用方法时service为null
服务消费者: @Reference(version = DubboConfig.INNOVATION_SERVICE_USER_VERSION) UserService userService; @Reference(version = DubboConfig.INNOVATION_SERVICE_USER_VERSION) TenantService tenant...原创 2020-01-17 14:04:57 · 2311 阅读 · 0 评论 -
自定义Log4j配置文件和RocketMQ-Client.jar下log文件冲突问题解决
项目jar正常,我们项目log4j中已经配置了root日志级别level为info,但是启动项目后,自定义logger日志只能打印error级别。启动服务时总是出现没有设置root logger的日志级别。2018-05-09 16:24:34,309 main WARN No Root logger was configured, creating default ERROR-level ...原创 2020-01-17 14:02:38 · 4126 阅读 · 0 评论 -
【JSON】解决FastJson中“$ref 循环引用”的问题
fastjson在循环引用时对象转化成json会发生循环依赖($ref):禁用FastJson的“循环引用检测”特性。@Configurationpublic class HttpConvertConfiguration { @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { ...原创 2020-01-17 13:56:53 · 601 阅读 · 0 评论