读书笔记
文章平均质量分 77
insight coder
刨根问底,原来是这样
展开
-
Case - SpringBootTest 使用过程中遇到的冷门问题
Case - SpringBootTest 使用过程中遇到的冷门问题问题描述使用SpringBootTest 测试DAO 逻辑时,直接报错:java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()从异常日志分析,是 tk.mybatis 的增强方法初始化问题。可是,启动工程调用该DAO 方法,是正常执行的,那么问题是出在哪呢?@Slf4j@RunWith(Sp原创 2022-02-14 14:43:21 · 479 阅读 · 0 评论 -
Tips-Java CAS 使用实例分析
并发编程在实际生产应用中,如果使用不当,会有意想不到的诡异问题。文章摘取一段Java AtomicLong 在统计功能上的使用,分析并发计数应该注意的点。并发计数代码/** * jetty 服务中,需要统计全局的连接数、请求数量之类的指标。提供了CounterStatistic 类用于统计这些数据。 * 其中,Statistic 就是借助AtomicLong 来实现total, maximum 数量的并发计数。 * * @from org.eclipse.jetty.util.statis.原创 2022-01-26 17:32:23 · 907 阅读 · 0 评论 -
清单-mybatis 参数封装和处理相关方法
清单目的:在使用到mybatis 冷门特性时候,可以快速参考查阅1. ParamNameResolver#getNamedParams方法入参封装,根据方法参数的个数,有不同的处理方法。参数个数处理方法备注0return null1 (非特殊类型 or @Param)return 原始入参对象需要特别注意,如果在动态SQL中使用,则不能为String、Integer等简单类型。>=2return HashMapname即参数的name,通过@Pa.原创 2021-11-17 17:39:16 · 441 阅读 · 0 评论 -
笔记 又一次慢SQL导致的线上服务不可用
记一次线上事故排查过程,事故的根本原因是慢SQL 查询。但线上问题的情况以及监控工具指标表现,并没有直接指向慢SQL 的问题,排查的过程值得记录和反思。线上事故系统使用人员反馈系统的操作卡顿或者不可用,数据列表查询有问题,后端请求响应非常慢。初步问题排查分析首先,第一反应应该是web-server出问题或者mysql-server 出问题。比如CPU打满或者内存打满,导致的服务不可用。通过监控工具查看应用服务器的指标、JVM指标以及数据库服务器CPU、磁盘的指标,都处于正常范围。然后,猜想是.原创 2021-10-19 21:39:24 · 353 阅读 · 0 评论 -
漫游 Redis SORTGET combination
缘起阅读Retwis-J(Redis版本的Twitter )设计文档过程中,对于Redis join 方案的实现比较感兴趣,因此记录下SORT/GET 的神奇用法。以备不时之需。Retwis-J 设计方案A common problem with any store is dealing efficiently with normalized data.A simple approach would be simply iterate through the list and load each原创 2021-07-30 17:41:24 · 84 阅读 · 0 评论 -
Insight springboot boot spring - EnableAutoConfiguration
springboot boot spring 的方案除了前一篇文章提到的,通过 SpringApplicationRunListener 暴露spring 框架启动的阶段,为spring 容器的初始化各种事件的扩展提供方案。另外一个boot spring 的方案就是 auto-configuration,通过个各种starter,提供各种EnableAutoConfiguration 接口的实现,将对应的特性注册到spring容器。springboot auto-configuration 原理首.原创 2021-07-23 17:33:55 · 144 阅读 · 0 评论 -
Insight springboot 默认配置文件加载实现
简介Spring Boot allows you to externalize your configuration so you can work with the same application code in different environments.You can use properties files, YAML files, environment variables and command-line arguments to externalize configuration.原创 2021-07-01 11:47:41 · 132 阅读 · 0 评论 -
okhttp read timed out 重试方案解疑
疑问使用okhttp 抓取数据场景中,偶发Read timed out异常。正常的做法是增加重试机制。在查看文档过程中,发现okhttp 默认会注册RetryAndFollowUpInterceptor ,字面上是支持重试的。那么,为什么timed out 异常不会重试,RetryAndFollowUpInterceptor 是干啥的?RetryAndFollowUpInterceptor分析能做什么This interceptor recovers from failures and fo原创 2021-06-11 16:16:59 · 4726 阅读 · 1 评论 -
Insight Spring重复Bean 注册的过程
疑问:在业务工程代码梳理过程中,发现竟然存在xml 和 注解两种方式配置相同beanName,但是不同的Class。竟然能正常启动发布。理论上beanName 是唯一的,是怎么回事。Insight Spring版本:3.2.0.RELEASE明确的前提Spring Bean在容器中的唯一标识是beanName。对应到xml bean标签是id,对应到注解中是默认属性value。xml 文件内,是不允许配置多个相同id 的Bean。Ide 会提示,同时启动也会报错 SAXParseExce.原创 2021-04-23 18:15:57 · 599 阅读 · 0 评论 -
Insight Mybatis JdbcTemplate 混合事务控制的实现
混合使用的背景最近项目中需要引入工作流引擎,实现业务和流程设计、流转的解耦。工作流流引擎选用的是snaker,轻量、易上手、可定制。访问数据库用的是JdbcTemplate 。项目中原有的持久层框架是Mybatis。这样就带来一个问题:怎样保证业务逻辑(Mybatis) 和工作流流引擎(JdbcTemplate )处于事务控制中,避免数据异常。比如:业务单据创建成功后,审批流程启动。如果单据创建成功,审批流程启动异常,事务就应该回滚,否则就成僵尸单据了。混合事务控制的配置<!-- 按照正原创 2020-11-24 21:49:36 · 1490 阅读 · 0 评论 -
Insight Spring3 @RequestMapping 自定义Aspect不生效问题
问题背景现有项目使用Spring3 框架,想要对应用所有的请求进行统一监控。一种方案是配置全局的 HandlerInterceptor,实现对请求的监控。一种方案是基于AOP,拦截@RequestMapping,实现对Controller 的方法进行监控。项目中采用的是这种方案,主要目的是收集方法粒度的性能、可用率的数据。问题描述编写完自定义的Aspect 监控类后,发现切面不生效。在spring-config.xml 中配置启用了@AspectJ 特性。<!--Enables th原创 2020-11-17 11:45:26 · 577 阅读 · 0 评论 -
Insight Spring Test事务自动回滚的实现
测试环境事务控制的意义避免测试用例的数据持久化的影响。需要事务控制回滚,还原场景,这样测试用例可以重复使用。(tests changes to the state may affect future tests)我们的业务逻辑需要事务控制,测试环境也要同样的模拟。测试环境-事务控制demo/** * 只需要测试类添加@Transactional, 保证所有的测试方式都有事务控制,并且执行完成后自动回滚。 * 参考 https://docs.spring.io/spring-framewor原创 2020-10-30 14:29:11 · 284 阅读 · 0 评论 -
Insight Mybatis 日志打印
日志打印引发的疑问在使用Mybatis 查询过程中,会有如下日志打印:DEBUG com.foo.dao.FooMapper.selectFooList - <== Total: 276我们知道,Mybatis 只有接口,并不存在日志中的这个类和对应的方法,那么Mybatis 执行日志是怎么打印的?Insight 分析和总结MappedStatement 初始化过程中,初始对应的logger,logger 的name即mappedStatementId,也就是接口名 + 方法名如果当原创 2020-09-18 18:08:04 · 233 阅读 · 0 评论 -
Insight Mybatis 内嵌resultMap工作原理
Insight Mybatis 内嵌resultMap工作原理疑问<!-- 如下的Mybatis 配置,collection 是如何工作的,对于SQL查询的数据结果集,在Mybatis 映射生成对象时,怎样组装的?--><resultMap id="viewResultMap" type="com.mybatis.model.CityView"> <result column="pid" jdbcType="INTEGER" property="pId"/>原创 2020-09-11 18:47:54 · 350 阅读 · 0 评论 -
snaker 使用指导和设计浅析
snaker 使用指导和设计浅析snaker 介绍Snaker是一个基于Java的开源工作流引擎,适用于企业应用中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持。流程引擎源码(oscgit):http://git.oschina.net/yuqs/snakerflow演示应用源码(oscgit):http://git.oschina.net/yuqs/snaker-web插件源码(oscgit):http://git.oschina.net/yuqs/snaker-原创 2020-09-10 21:22:37 · 2496 阅读 · 0 评论 -
Insight Spring-UCC组件实现机制和改进思考
UCC-统一配置中心,实现对应用系统需要实时调整的配置属性进行管理,比如各种开关、阈值、重试次数等。Spring-UCC 组件实现思路:基于ZooKeeper,实现配置的保存和分发。通过ZK的节点watch特性,实现管理端修改完配置数据后,每个应用的ZK client 都可以收到变动数据。然后通过约定的配置,将对应数据同步到 Config Bean 对应的属性。最终达到实时修改应用配置属性的目的。问题描述 功能开发中,使用UCC 配置了业务阈值用来是否监控报警。结果发现通过UCC管理端修改配置.原创 2020-08-20 15:16:36 · 220 阅读 · 0 评论 -
Insight Spring 循环依赖及解决方案
遇到的问题:项目中需要用到策略模式,把策略实现以集合的形式注入到Service 中。因为要强制校验策略的顺序,所以采用的是构造器注入,简单明了。结果Spring 启动失败,Is there an unresolvable circular reference?。分析首先,查看Spring启动异常的日志,throw BeanCurrentlyInCreationException/** * Exception thrown in case of 引用了当前正在创建中的bean. * Typica.原创 2020-08-11 19:59:28 · 249 阅读 · 0 评论 -
Insight Spring中的算法-占位符查找
实用算法学习、分析算法1/** * 查找占位符匹配的后缀索引。 * 因为Spring支持嵌套的占位符表示,所以配对的查找是这个方法核心要解决的 * 逻辑:遍历字符串buf,匹配遇到的占位符前缀和后缀,如果是配套的后缀,则返回索引。 * 因为有嵌套占位符的情况,需要一个临时的变量记录内嵌占位符的出现次数,通过成对匹配的计算(出现前缀加1,出现后缀减1),防止错误返回内嵌占位符的后缀索引。 * @param buf 配置字符串,比如:${foo:${defaultFoo}} * @param.原创 2020-07-27 21:27:22 · 317 阅读 · 0 评论 -
Insight Spring 注入排序的集合
背景项目中需要策略模式来解耦业务的场景,通过组合相同接口的Bean来实现。策略模式可以避开一长串的if-else,规范性、扩展性也好一些。使用spring 自动注入的好处是:随着业务的增加,只需要添加具体的实现类即可,无需关注策略的调度和实现。引出的问题是:if-else 旧的代码有default 的处理,如何确保托底策略的bean 是在集合的最后?// show code 通过spring 注入 FooHandler 处理器实现@Autowiredpublic FooService(List&原创 2020-05-09 18:19:06 · 514 阅读 · 0 评论 -
insight mybatis 动态sql解析-part2
insight mybatis 动态sql解析-part2part1 主要分析动态sql 参数相关的解析,对于xml-> sql 的过程没有详细分析,此文补上。part1 GO.增加part2源码分析的原因,工作中遇到的一个bug,mybatis 查询有个参数为0,导致拼接的sql异常。需要定位问题原因。问题<!--问题sql片段,入参source=0,导致拼接完的sql...原创 2020-04-07 21:14:32 · 165 阅读 · 0 评论 -
Insight Spring @Value 默认值配置解析实现
Insight Spring @Value 默认值配置解析实现背景最近接手的项目,配置项实在是多。主要使用Spring @Value 注入,很多是固化下来的配置,但也不能彻底写死,以备临时调整。现在的做法是,直接把固化的配置以默认值表达式形式配置到代码中。约定大于配置 配置表达式类似于@Value("${foo.skill.switch:false}")这个默认值是语法还是自定义实现,需...原创 2020-03-06 18:19:43 · 262 阅读 · 0 评论 -
Insight HandlerInterceptor 与@ExceptionHandler 的执行顺序
Insight HandlerInterceptor 与@ExceptionHandler 的执行顺序问题起源:项目中HandlerInterceptor preHandle方法会把登录的用户信息存储在ThreadLocal,方便请求逻辑中获取,afterCompletion方法中会remove。当发生异常时,想通过@ExceptionHandler打印当前的用户名,还能拿到用户信息吗?...原创 2019-12-10 21:25:58 · 1099 阅读 · 0 评论 -
Insight spring @Async 工作机制
@Async 是怎样解析的,spring如何实现注解方法的异步调用原创 2016-08-16 19:10:29 · 618 阅读 · 0 评论 -
Insight Spring MVC 配置加载机制
DispatcherServlet配置两种方式:指定配置文件路径,set contextConfigLocation配置文件使用约定的路径和命名方式servlet> servlet-name>sampleservlet-name> servlet-class>org.s.w.s.DispatcherServletservlet-class> init-par原创 2018-02-01 21:24:52 · 236 阅读 · 0 评论 -
漫游ZooKeeper nio通信过程
0.引子最近在看分布式并发工具menagerie,借助ZooKeeper,实现常用的collection、lock。 menagerie 含金量高,可以作为工具储备,也可以借鉴开发技巧。1.ZooKeeper通信创建ZooKeeper对象,构造过程中会创建ClientCnxn对象,用于命令的发送、接收ClientCnxn 核心包含两个工作线程:sendThread 和 eve原创 2018-01-25 16:18:47 · 949 阅读 · 0 评论 -
漫游HttpURLConnection
最近在看http相关的知识,记录一下HttpURLConnection的体会创建URL对象过程中,涉及到URLStreamHandler的检测,getURLStreamHandler(protocol)实现URL用HashTable维护或者缓存了protocol对应的Handler,懒加载模式,需要的时候并且HashTable中没有,才会触发Handler对象创建Handler对象创建原创 2018-01-04 21:40:33 · 228 阅读 · 0 评论 -
mark mybatis annotation driven
mybatis默认支持annotation原创 2017-12-28 21:34:40 · 197 阅读 · 0 评论 -
漫游 servlet请求参数 %urldecode
url decode 过程原创 2017-12-28 20:22:21 · 385 阅读 · 0 评论 -
Insight spring-task:executor
<task:executor id="executor" keep-alive="30" pool-size="64-256" queue-capacity="1024" rejection-policy="CALLER_RUNS"/>原创 2017-11-21 10:17:00 · 280 阅读 · 0 评论 -
漫游 javax.servlet 请求参数解析(jetty 实现)
request 参数解析,大悟!!原创 2017-12-27 21:32:39 · 822 阅读 · 0 评论 -
Insight spring RestTemplate
insight spring 提供的rest操作,以及jdk自带URL http访问的实现原创 2018-01-03 17:07:57 · 190 阅读 · 0 评论 -
mark JRebel 7升级 free
free free free!原创 2017-12-13 16:18:20 · 904 阅读 · 0 评论 -
mark java发起http请求的方式
系统间的交互,除了webservice,最简单应该就是http方式。 比如微信平台、支付宝、微博、QQ的api调用。 常用的方式及example:JDK 提供的机制/** * 最简单的使用,参考:https://developer.android.com/reference/java/net/HttpURLConnection.html */URL url = new URL原创 2018-01-03 16:31:04 · 269 阅读 · 0 评论 -
mybatis-spring 启用 mapUnderscoreToCamelCase xml 配置
启用mybatis mapUnderscoreToCamelCase 特性,可以更方便智能完成自定义对象的装配。 eg:column name = audit_state,可以自动mapping/set自定义对象的属性auditState。需要的:spring.version = 4.2.5.RELEASEmybatis.version = 3.4.0mybatis-s原创 2018-02-06 16:59:59 · 2051 阅读 · 0 评论 -
Insight spring-boot web错误页跳转原理
引子 为什么404的错误页显示 Whitelabel-page ? 根据浏览器的网络请求分析,肯定是服务内部跳转处理的。 根据返回Whitelabel 错误页的信息,肯定是spring-boot 处理的错误页 内部实现是如何跳转的?spring-boot 如何替web容器托管了错误页处理功能?SpringBoot默认提供/Error映射,它以合理的方式处理所有错误,并在serv...原创 2019-08-16 20:32:29 · 246 阅读 · 0 评论 -
@Mapper 不生效问题记录
项目中的Mapper使用,整体调整了maven依赖,发现注解@Mapper 的类找不到bean,一开始以为是通用Mapper 和@Mapper 不兼容,或者mybatis-spring 和tk.mybatis 加载顺序导致的不生效问题最终查看maven依赖,发现当前的module没有引用到mybatis,导致MybatisAutoConfiguration直接没有生效,也就没有自动完成myba...原创 2019-08-02 00:01:18 · 13166 阅读 · 0 评论 -
mybatis周边记录
使用mybatis,对于用到的组件需要明确其作用,这样才能灵活用好组件,熟悉原理,能够更好的评估组件的作用和排查问题。mybatis 周边按照依赖的顺序,列出如下,其中pagehelper 和mapper 没有依赖关系mybatis mybatis核心库mybatis-spring mybatis集成spring库mybatis-spring-boot-autoconfigur...原创 2019-08-01 23:30:49 · 114 阅读 · 0 评论 -
问题分析NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.<init>
问题使用通用Mapper 执行insertList,报错如题,大概意思是:没有找到SpecialProvider默认构造方法,SpecialProvider实例化失败。原因分析SpecialProvider实例化时机晚了,应该在通用Mapper初始化加载过程中完成,也就是应该让通用Mapper 去完成SpecialProvider实例化。解决方法也就清楚了,应该在通用Mapper 配置上做修...原创 2019-08-08 11:32:04 · 1597 阅读 · 0 评论 -
Insight ConfigurationProperties 实现
扩展配置的注解。如果要绑定和验证某些配置属性(例如,来自.properties文件),则将其添加到@Configuration 或@Bean 定义的类中。注意,与@value不同,不会计算Spel表达式,因为属性值是扩展的。@ConfigurationProperties 使用场景作为某个配置集合,以对象的形式提供配置,更加符合面向对象的思想。原有采用@Value配置属性的场景,如果是...原创 2019-07-26 20:42:47 · 151 阅读 · 0 评论 -
Insight AutoConfigureAfter 实现
springboot启动过程中,自动注册配置的初始化顺序可以通过@AutoConfigureBefore @AutoConfigureAfter 实现。比如Mybatis自动配置需要在DataSource 自动配置之后初始化,AutoConfigureAfter 是如何实现的@AutoConfigureAfter 使用场景@AutoConfigureAfter(DataSourceAuto...原创 2019-07-10 21:04:50 · 905 阅读 · 0 评论