「 JAVA 」 五月 15, 2022
使用 Alibaba Druid 进行 SQL 翻译
文章字数 12k 阅读约需 11 mins.
Alibaba Druid 是阿里云计算平台 DataWorks 团队出品,为监控而生的数据库连接池。
Apache 旗下也有一个 Apache Druid,是一个高性能的实时分析数据库。
本文提到的 Druid
,指 Alibaba Druid
。
Druid
其实是一个 JDBC 组件库,不仅包含数据库连接池组件,还有 SQL Parser 等组件,被大量业务和技术产品使用或集成,从 GitHub 的 Start 数量(25.5k
),和 Used by
数量(206k
)可见一斑。
网上关于 ...
查看全文「 JAVA 」 四月 17, 2022
写测试用例都这么简单了,你不来试试?
文章字数 14k 阅读约需 13 mins.
提到测试,所有人都知道它的重要性,但大部分开发人员都会觉得测试应该交给测试人员来做,或者直接到环境上执行一下、点一点看看没有问题就可以了。
究其原因,个人觉得是因为写单元测试的成本太高了,尤其是对外部环境依赖较多的项目,开发环境想运行起来都要依赖特定的组件,就更别提测试用例的运行了。
一个好的测试用例,应该是自动化的、可重复执行的,容易理解、容易运行的,且有明确的断言,以便在代码出现不符合预期的结果时,能够快速发现且定位到问题的。
本文以一些面向 Java 和 Spring 的常见测试场景为例,...
查看全文「 JAVA 」 二月 13, 2022
覆盖 MyBatis Mapper 文件
文章字数 14k 阅读约需 12 mins.
在 通过 -Xbootclasspath/a 参数修改 Spring Boot 应用行为实例 的 场景2 中,我们通过 -Xbootclasspath/a
参数,对 Spring Boot 应用 JAR 包中的 Mapper 文件进行了覆盖,但美中不足的是需要将未修改的 Mapper 文件也重新附加进去。
本文将演示两种仅需将改动的 Mapper 文件覆盖进去的方式。
先让我们看一下,在使用 MyBatis 时,如果仅将修改了的 Mapper 文件(即非全部 Mapper 文件)添加到 bootclasspath...
「 JAVA 」 一月 23, 2022
通过 -Xbootclasspath/a 参数修改 Spring Boot 应用行为实例
文章字数 3.9k 阅读约需 4 mins.
在 Spring boot 应用不重新打包,添加新类 中简单介绍了 -Xbootclasspath/a
参数的用法,下面用两个实例来进行实际使用场景的说明。
bootclasspath 为本文使用的演示项目,可通过 mvn clean package -DskipTests
命令获得 Spring Boot 应用 JAR 包,并在项目根路径通过 java -jar app/target/app-0.0.1-SNAPSHOT.jar
命令启动应用,之后可访问 http://localhost:8080...
「 JAVA 」 十二月 26, 2021
ThreadLocal 泄露实例
文章字数 10k 阅读约需 9 mins.
Java 中,ThreadLocal
是线程本地变量,可用来在多线程环境,为每个线程保存一份独立的变量,不会被其他线程所操作。
关于 ThreadLocal 详细的介绍及用法,可以查阅 An Introduction to ThreadLocal in Java 。
线程的创建和销毁是很昂贵的操作,需多线程执行时,一般会使用线程池。当线程池和 ThreadLocal 同时使用时,因为线程在使用完成后会归还给线程池,供下次使用,而并非销毁再重新创建,所以如果之前线程存入的本地变量没有进行清理,后续...
查看全文「 JAVA 」 十二月 19, 2021
无法动态附加到 Java 进程?
文章字数 5.5k 阅读约需 5 mins.
找出 Java 应用频繁 Full GC 的原因 中介绍了一些 JDK 中自带的命令,
如:jmap
、jstat
等,但在实际使用时,可能会遇到类似如下的问题:
$ jmap -histo 2867
2867: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding...
查看全文
「 JAVA 」 十二月 12, 2021
找出 Java 应用频繁 Full GC 的原因
文章字数 12k 阅读约需 11 mins.
一个线上的 Java 应用(JDK1.8,默认 Parallel GC)在运行几天之后,出现频繁 Full GC 的现象,使用 jstat -gcutil <pid> 2s
观察,状态大致如下:
$ jstat -gcutil 23426 2s
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 93.17 99.99 83.81 78.48 1814 90.687 45 261.660 352.347
0.00 0.00 97.30 99...
查看全文
「 JAVA 」 十二月 05, 2021
使用 Java 8 Stream 优雅的找出重复数据
文章字数 5.9k 阅读约需 5 mins.
原文地址:https://wyiyi.github.io/amber/2021/11/30/stream/
最近经常遇到问题:要获取到集合中某一属性值重复的数据,除了for 循环,还有更简单得处理方式?
先来引入 Stream 流的概念。
Stream API(java.util.stream.*)
是 Java 8 中新增重要特性。
Stream 将要处理的元素集合看作一种流,由于java.util.stream.Stream
是一个 Interface
,在其中提供了函数方法,
使流在管道中进行...