JAVA 一月 23, 2022

通过 -Xbootclasspath/a 参数修改 Spring Boot 应用行为实例

文章字数 3.9k 阅读约需 4 mins.

Spring boot 应用不重新打包,添加新类 中简单介绍了 -Xbootclasspath/a 参数的用法,下面用两个实例来进行实际使用场景的说明。

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...

查看全文

SPRING 一月 09, 2022

Spring boot 应用不重新打包,添加新类

文章字数 2.8k 阅读约需 3 mins.

因为某些约束,我们可能不希望对 Spring Boot 应用重新打包,却又需要调整其中的某些行为(如:添加新类),有没有办法?

1. PropertiesLauncher

修改启动命令,不再是使用 java -jar 方式启动,而是使用传统的 Java 应用启动方式,先通过 -cp 参数将 Fat Jar (example.jar)加入 classpath,然后指定运行的主类 PropertiesLauncher,并且通过 -D 参数,将系统属性传入主类中。

$ java -cp example....
查看全文

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...

查看全文

OTHERS 七月 18, 2021

医保开发内外兼修之内功

文章字数 187 阅读约需 1 mins.

SPRING 六月 27, 2021

玩转 @ConditionalOnMissingBean

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

男人,不能说不行! 中,留了两个问题:

  1. 为什么名为 testServiceImpl 的 Bean 会被注册?
  2. 为什么无法注入 TestService 的实例?

先从可运行环境 https://github.com/AlphaHinex/conditional-on-missing-bean-demo 看下结果。

在测试用例中,通过 @Autowired 注解注入了 TestService,但调用时,报了空指针异常,说明容器中没有 TestService 类型的实例。

那么是 @ConditionalOnMi...

查看全文

JAVA 四月 11, 2021

Java 应用远程调试

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

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

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

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

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

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

查看全文
加载更多
0%