热加载 hotswap-classloader
Introduction
什么是 hotswap-classloader
?
hotswap-classloader
是一款由 笔者 litongjava 创建的 Java 动态类加载器。这个工具的核心功能是支持在 Java 应用运行时动态地更换或更新类定义,而无需重启整个 JVM。这种热替换(hot swapping)的能力对于开发过程中的迭代和测试尤其有价值,因为它大大减少了等待应用重启的时间。
为什么将 hotswap-classloader
和 tio-boot
结合使用?
结合使用 hotswap-classloader
和 tio-boot
可以为 Java 网络应用开发带来以下几个关键优势:
快速迭代和测试:通过使用
hotswap-classloader
,开发者可以在不重启服务器的情况下实时更新类文件,从而实现快速迭代和即时测试。提升开发效率:减少了重启应用程序所需的时间,开发者可以更加专注于代码的编写和改进,从而提高工作效率。
适合敏捷开发:在敏捷开发模式下,需要频繁地进行更改和测试。
hotswap-classloader
的动态加载能力使得这一过程更加流畅和高效。
总的来说,结使用 hotswap-classloader
和 tio-boot
不仅提高了开发效率,而且增强了网络应用开发的灵活性和便利性。这对于希望快速迭代和改进其网络应用的开发团队来说,是一个非常有价值的组合。
整合步骤
整合热加载步骤
添加依赖
<dependency>
<groupId>com.litongjava</groupId>
<artifactId>hotswap-classloader</artifactId>
<!--https://central.sonatype.com/artifact/com.litongjava/hotswap-classloader-->
<version>${hotswap-classloader.version}</version>
</dependency>
添加依赖后使用 TioApplicationWrapper 启动服务即可
package com.litongjava.aio.server.tio;
import com.litongjava.hotswap.wrapper.tio.boot.TioApplicationWrapper;
public class AiServerTio {
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
TioApplicationWrapper.run(AiServerTio.class, args);
long end = System.currentTimeMillis();
System.out.println("started:" + (end - start) + "(ms)");
}
}
使用 TioApplicationWrapper 启动应用,在启动类的 Program arguments 添加启动参数--mode=dev,或者在配置文件中添加才能启用热加载功能
mode=dev
测试加载效果
如果是 Eclipse IDE,保持一个文件即可测试加载效果,如果是 IDEA 环境需要再运行时手动编译(Build-->Recompile)文件才可以看到效果
热加载的使用请参考文档
https://github.com/litongjava/hotswap-classloader
部署
- 不要在 Program arguments 添加启动参数--mode=dev,TioApplicationWrapper 会调用 TioApplication 启动项目
- 理论上不会有多余的性能损耗,应为 TioApplicationWrapper 仅仅判断了 mode=dev