文章目录
单元测试
CGLIB
Thrift
Thrift入门
mac安装用brew
export THRIFT_HOME=/usr/local/Cellar/thrift
export PATH=$PATH:$THRIFT_HOME/bin
日志系统
common-log和slf4j是门面框架,真正进行日志处理的是后面的实现框架。
SLF4J
Simple Logging Facade for Java (SLF4J)
SLF4J 使用手册
只看原理即可,因为里面slf4j配log4j的第一版本,log4j-slf4j-impl这个配的是第二版本。
Log4j2与Slf4j的最佳实践
相当于在pom里引用了这两个包,然后调用的时候使用的是slf4j的功能,但slf4j底层调用的是log4j的功能。
log4j2
Apache Log4j 2 官网
log4j2使用教程
聊一聊log4j2配置文件log4j2.xml
log4j2配合slf4j使用
Layouts 布局 里面可以找配色
idea中应用log4j2彩色日志
logback
Setting the location of the configuration file via a system property Chapter 3: Configuration
可以通过往System.gerProperties里放值,来完成${xxx}表达式替换
logback的使用和logback.xml详解
RollingFileAppender的排版有点问题
Logback配置
Chapter 6: Layouts
Logback中使用TurboFilter实现日志级别等内容的动态修改
LogBack 日志等级设置无效,原因竟然是因为这个?!
java logback手动加载配置文件
Jackson
jackson 入门教程
Jackson JSON Tutorial
jackson github
Jackson Date
如果web的返回数据里多了"$ref": "$.data.autoDashboardDetailDTOs[1]",那么就说明列表里存在重复对象;
lombok
Lombok 看这篇就够了
lombok里还提供了@Slf4j,会自动给类添加一个log对象,通过看其编译的类可以看出,其相当于用slf4j来创建logger是一样的private static final Logger log = LoggerFactory.getLogger(Clazz.class);
lombok @EqualsAndHashCode 注解的影响
Omitting one Setter/Getter in Lombok
Error compiling Java/Scala mixed project and Lombok
给scala代码配lombok注解会失效
Apache HttpClient
官网
HttpClient-4.5.2官方教程完整翻译
HttpClient连接池的使用
HttpClient连接池的一些思考
Guava
Guava github
Google Guava Cache 全解析
Reactor
响应式Spring的道法术器(Spring WebFlux 教程)
Apache commons lang
JCommander
Hutool
高性能队列——Disruptor
数据库中间件
mysql
JDBC元数据操作(一)-- DatabaseMetaData接口详解
DatabaseMetaData类
JDBC报错Public Key Retrieval is not allowed终极解决方案
Mybatis
配置
useColumnLabel配置的功能
Mybatis设置sql超时时间
【Java开源框架】持久层框架mybatis与spring/spring boot整合
MyBatis技术原理浅析:使用MyBatis+Druid连接MySQL数据库
提供了logPrefix和logImpl配置项来帮助配置日志框架
mybatis打印sql日志
拓展
mapper
mybatis的association以及collection的用法
mybatis中association和collection的column传入多个参数问题
association之中的property代表着这个association生成的对象需要被赋给User对象的card属性,而column字段只在嵌套association+select的时候会用到,具体可以看mybatis的文档
MyBatis循环Map(高级用法)
Mybatis中传入的参数为Map嵌套List
mybatis之foreach用法
mybatis常用jdbcType数据类型以及对应的JavaType
mybatis学习之路----insert主键返回 selectKey使用
Mybatis批量插入返回插入成功后的主键id
Mybatis中#{}与${}的区别
21. Mybatis 的三种执行器
用batch的时候一定要/一定要执行commit,否则数据库中不会插入数据/
MyBatis Generator
MyBatis Generator
神器
MyBatis Generator实现MySQL分页插件
这种方式是通过修改输出的xml来进行limit分页
MyBatis 分页插件 PageHelper
该插件可以影响sqlSesionTemplate的selectList(“xxx”,param, new RowBounds(1,10))方法,在执行的sql后面自动加上limit。也可以直接影响Mapper类的select(param,new RowBounds(1, 10))方法
记mybatis-generator生成实体类继承基类的一个大坑
并且对基本类型默认使用包装类,mbg认为包装类与基本类型不一致,所以有些属性不会继承,而是会在pojo里再生成一遍,解决方案就是columnOverride
mybatis-generator 自定义插件
mybatis generator为实体类生成自定义注释
其实默认的commentgenerator已经相当够用了。
Druid
Druid配置参数详解-maxWait
DruidDataSource配置
数据库连接池配置(案例及排查指南)
Druid 自定义拦截器
Freemarker
Redis
Redis高级客户端Lettuce详解
Lettuce连接池
Jedis使用教程完整版
有关lettuce连接池的疑问
【小家Spring】Redis序列化、RedisTemplate序列化方式大解读,介绍Genericjackson2jsonredisserializer序列化器的坑
Reactor
使用Reactor进行反应式编程
使用 Reactor 进行反应式编程
okhttpclient
拦截器
OkHttp拦截器获取GET/POST请求参数并添加公共参数
Okhttp拦截器统一异常处理并多次读取response.body().string()
Netty
Netty中的Option和ChildOption参数解析
背景:一个服务端接收请求的时候,实际上是有两类线程,一类线程是用于监听,也就是说关注accept事件;java的nio里,当accept事件发生后,会返回一个channel,而监听这个channel之后的read和write事件,就是第二类线程做的事了;
而在netty里,线程是由EventLoop表示,用于监听的线程,就被称为parent,用于read和write的线程,就是child
定时任务
SnakeYaml
Yaml文件的解析工具----SnakeYaml快速入门
SnakeYaml快速入门
Parsing YAML with SnakeYAML
Mockito
单元测试之Mockito+Junit使用和总结(完整)
在软件开发领域,mock(模拟) 是一种测试技术,用于创建轻量级的替代对象(称为 mock 对象),来替代真实组件或服务的行为。Mock 对象可以模拟真实对象的接口和响应,帮助开发者在隔离环境中测试代码逻辑。
比如说我现在有个接口需要测试,但是这个接口的input特别不好造,比如说是jdbc的ResultSet对象,这种对象光new出来一个是没法用的,那么就可以mock一个这个对象,这个对象“长得像鸭子,叫的像鸭子”,那就可以认为他是个鸭子。
本文介绍了Java开发中常用的工具和框架,包括单元测试、CGLIB、Thrift、日志系统(SLF4J、log4j2、logback)、Jackson、Lombok、Apache HttpClient、Guava、Reactor等,并深入探讨了Mybatis的配置、拓展和Mapper使用,以及数据库中间件如MySQL和Druid的配置与实践。

724

被折叠的 条评论
为什么被折叠?



