SpringBoot 3 开发随笔
SpringBoot 3 版本
2022 年 11 月 24 日,SpringBoot 3.0 正式发布了。此版本包含了 12 个月以来 151 个人的 5700 多次 Commit 的工作结晶。这是自 4.5 年前发布 2.0 以来,Spring Boot 的第一次重大修订。它也是第一个支持 Spring Framework 6.0 和 GraalVM 的 Spring Boot GA 版本。
新变化
- 支持响应式编程
- 支持 Spring Framework 6.0
- 支持 GraalVM native images
- Spring 自身与第三方包版本升级
- 最低支持 JDK 17,最高支持 JDK 19
- 从 Java EE API (Javax) 迁移到 Jakarta EE API
- 自动配置的包位置变化
- 旧版本:
META-INF/spring.factories - 新版本:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
- 旧版本:
JMeter 压测教程之一基础使用
Java 的五种代理实现方式
大纲
前言
本文主要介绍 Java 的五种代理实现方式,包括 JDK 动态代理、Cglib、ASM、Javassist、Byte Buddy,点击 下载完整的案例代码。
准备工作
先定义出一个接口和相应的实现类,方便后续使用代理类在方法中添加日志信息。
- 接口
1 | public interface IUserApi { |
Java 的静态代理使用
如何估算 Java 线程池的大小与队列长度
估算算法
第一种估算算法
先来一个天真的估算算法:假设要求一个系统的 TPS(Transaction Per Second 或者 Task Per Second)至少为 20,然后假设每个 Transaction 由一个线程完成,继续假设平均每个线程处理一个 Transaction 的时间为 4s。那么问题可以转化为:如何设计线程池大小,使得可以在 1s 内处理完 20 个 Transaction?这里计算过程可以很简单,每个线程的处理能力为 0.25TPS,那么要达到 20TPS,显然需要 20/0.25=80 个线程。
很显然这个估算算法很天真,因为它没有考虑到 CPU 数目。一般服务器的 CPU 核数为 16 或者 32,如果有 80 个线程,那么肯定会带来太多不必要的线程上下文切换开销。
第二种估算算法
第二种估算算法比较简单,但不知是否可行(N 为 CPU 总核数):
- 如果是 CPU 密集型应用,则线程池大小设置为 N+1
- 如果是 IO 密集型应用,则线程池大小设置为 2N+1
如果一台服务器上只部署这一个应用并且只有一个线程池,那么这种估算或许合理,具体还需自行测试验证。
Java 代码规范检测与格式化(超详细)
前言
本文主要介绍如何检测 Java 代码规范与格式化 Java 代码,包括 IDEA 插件与 Maven 插件的使用。
代码规范检测插件
IDEA 代码规范检测插件
IDEA 可以使用 CheckStyle-IDEA 插件来检测 Java 代码的规范,它可以保证每位提交者的代码规范都保持一致。值得一提的是,CheckStyle-IDEA 插件只能检测代码的规范,并不能格式化代码。
创建规则文件
在项目中创建 checkstyle.xml 规则文件,例如路径为 config/checkstyle/checkstyle.xml。
提示
- Alibaba Nacos 的 CheckStyle 规则文件如下,要求 CheckStyle 的版本至少为
8.30
