JAVA 二月 13, 2022

覆盖 MyBatis Mapper 文件

文章字数 14k 阅读约需 12 mins.

通过 -Xbootclasspath/a 参数修改 Spring Boot 应用行为实例 的 场景2 中,我们通过 -Xbootclasspath/a 参数,对 Spring Boot 应用 JAR...

查看全文

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 中自带的命令,
如:jmapjstat 等,但在实际使用时,可能会遇到类似如下的问题:

$ 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 十月 31, 2021

GMT+8 和 Asia/Shanghai 的区别

文章字数 6.2k 阅读约需 6 mins.

现今全球共分为24个时区。实际上,常常1个国家或1个省份同时跨着2个或更多时区,为了照顾到行政上的方便,常将1个国家或1个省份划在一起。所以时区并不严格按南北直线来划分,而是按自然条件来划分。例如,中国幅员宽广,差不多跨5个时区,但为了使用方便简单,实际上在只用东八时区的标准时即北京时间为准。 —— 引自百度百科 时区

时区可以使用名称(如:东八区、西五区)、偏移量(如:UTC+8UTC-5)、缩写(如:PSTCST),或 时区数据库Area/Location 的形式(如 Asia...

查看全文

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之前,进行拦截。在拦截到用户的请求后,我们可以实现一些自定义的业务逻辑。
例如:...

查看全文

JAVA 八月 08, 2021

Flyway 实战

文章字数 7.8k 阅读约需 7 mins.

Using Liquibase with Gradle in Spring Project 中,介绍了数据库版本控制工具 Liquibase,并且总结到

面向 SQL,选择 Flyway

不面向 SQL,选择 Liquibase

如果你还在单独分发数据库变动脚本,甚至简单粗暴的将开发库直接导出并导入生产环境,建议一起来了解一下 Flyway 的用法。

Flyway 中的概念可查阅 官方文档,这里挑选一些重要的进行简单介绍。

Schema History Table

Flyway 对数据库进行版...

查看全文

JAVA 四月 11, 2021

Java 应用远程调试

文章字数 10k 阅读约需 10 mins.

软件开发会时经常会遇到这样的场景:

  • 现场反馈的问题,在本地环境无法重现,可能需要将现场数据库导回来才能重现问题
  • 生产环境中的服务无法直接从本地开发环境进行连接,进而无法使用本地代码进行调试

在上面的场景中,无论是将现场库导出,还是开通生产环境服务的访问权限,都是非常困难且不安全的。

本文将介绍一种由 Java 平台提供的,远程调试 Java 应用的方法。

JPDA(Java Platform Debugging Architecture)是一个多层调试架构,支持在不同操作系统、虚拟机及 JDK...

查看全文
加载更多
0%