「 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 ,在其中提供了函数方法,
使流在管道中进行...
「 JAVA 」 十月 17, 2021
Servlet 之 Filter
文章字数 7.3k 阅读约需 7 mins.
原文地址:https://wyiyi.github.io/amber/2021/10/01/filter/
Servlet 作为Java Web 的基础,在 Servlet API 中提供了一个 Filter 接口,Filter,又称过滤器。
所谓过滤器顾名思义是用来过滤的,可以从客户端向服务端发送请求进行过滤,也可以对服务器返回响应进行处理。
根据上面的流程可以看出,Filter的作用就是在用户请求到达Servlet之前,进行拦截。在拦截到用户的请求后,我们可以实现一些自定义的业务逻辑。
例如:...