热加载 hotswap-classloader

Introduction

什么是 hotswap-classloader

hotswap-classloaderopen in new window 是一款由 笔者 litongjava 创建的 Java 动态类加载器。这个工具的核心功能是支持在 Java 应用运行时动态地更换或更新类定义,而无需重启整个 JVM。这种热替换(hot swapping)的能力对于开发过程中的迭代和测试尤其有价值,因为它大大减少了等待应用重启的时间。

为什么将 hotswap-classloadertio-boot 结合使用?

结合使用 hotswap-classloadertio-boot 可以为 Java 网络应用开发带来以下几个关键优势:

  1. 快速迭代和测试:通过使用 hotswap-classloader,开发者可以在不重启服务器的情况下实时更新类文件,从而实现快速迭代和即时测试。

  2. 提升开发效率:减少了重启应用程序所需的时间,开发者可以更加专注于代码的编写和改进,从而提高工作效率。

  3. 适合敏捷开发:在敏捷开发模式下,需要频繁地进行更改和测试。hotswap-classloader 的动态加载能力使得这一过程更加流畅和高效。

总的来说,结使用 hotswap-classloadertio-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