欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

tio-boot整合hotswap-classloader實(shí)現(xiàn)熱加載方法實(shí)例

 更新時(shí)間:2023年12月19日 08:59:35   作者:李通  
這篇文章主要為大家介紹了tio-boot整合hotswap-classloader實(shí)現(xiàn)熱加載方法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

什么是 hotswap-classloader?

hotswap-classloader 是一款由開發(fā)者 litongjava 創(chuàng)建的 Java 動(dòng)態(tài)類加載器。這個(gè)工具的核心功能是支持在 Java 應(yīng)用運(yùn)行時(shí)動(dòng)態(tài)地更換或更新類定義,而無需重啟整個(gè)JVM。這種熱替換(hot swapping)的能力對(duì)于開發(fā)過程中的迭代和測(cè)試尤其有價(jià)值,因?yàn)樗蟠鬁p少了等待應(yīng)用重啟的時(shí)間。

什么是 tio-boot?

tio-boot 是一個(gè)基于 Java 的網(wǎng)絡(luò)編程框架,用于簡(jiǎn)化網(wǎng)絡(luò)應(yīng)用的開發(fā)。它提供了一套豐富的 API 和工具,使開發(fā)者能夠更容易地構(gòu)建和部署網(wǎng)絡(luò)服務(wù)和應(yīng)用。tio-boot 支持多種網(wǎng)絡(luò)協(xié)議,并且提供了高性能和可擴(kuò)展性。

為什么將 hotswap-classloader 和 tio-boot 結(jié)合使用?

結(jié)合使用 hotswap-classloader 和 tio-boot 可以為 Java 網(wǎng)絡(luò)應(yīng)用開發(fā)帶來以下幾個(gè)關(guān)鍵優(yōu)勢(shì):

  • 快速迭代和測(cè)試:通過使用 hotswap-classloader,開發(fā)者可以在不重啟服務(wù)器的情況下實(shí)時(shí)更新類文件,從而實(shí)現(xiàn)快速迭代和即時(shí)測(cè)試。
  • 提升開發(fā)效率:減少了重啟應(yīng)用程序所需的時(shí)間,開發(fā)者可以更加專注于代碼的編寫和改進(jìn),從而提高工作效率。
  • 適合敏捷開發(fā):在敏捷開發(fā)模式下,需要頻繁地進(jìn)行更改和測(cè)試。hotswap-classloader 的動(dòng)態(tài)加載能力使得這一過程更加流暢和高效。

總的來說,結(jié)使用 hotswap-classloader 和 tio-boot 不僅提高了開發(fā)效率,而且增強(qiáng)了網(wǎng)絡(luò)應(yīng)用開發(fā)的靈活性和便利性。這對(duì)于希望快速迭代和改進(jìn)其網(wǎng)絡(luò)應(yīng)用的開發(fā)團(tuán)隊(duì)來說,是一個(gè)非常有價(jià)值的組合。

整合 hotswap-classloader,開啟熱加載有兩種方式,

  • 在啟動(dòng)中使用 TioApplicationWrapper 啟動(dòng)
  • 啟動(dòng)配置類配置 hotswap-classloader

這里重點(diǎn)介紹第二種方式

如何在開發(fā)環(huán)境下使用 hotswap-classloader 和 tio-boot 實(shí)現(xiàn)動(dòng)態(tài)類加載。

1. 添加 hotswap-classloader 依賴

首先,您需要在您的 Java 項(xiàng)目中添加 hotswap-classloader 依賴。在項(xiàng)目的 pom.xml 文件中添加以下依賴配置:

<properties>
  <hotswap-classloader.version>1.2.0</hotswap-classloader.version>
  <tio-boot.version>1.2.4</tio-boot.version>
</properties>
<dependencies>
  <dependency>
    <groupId>com.litongjava</groupId>
    <artifactId>tio-boot</artifactId>
    <version>${tio-boot.version}</version>
  </dependency>
  <dependency>
    <groupId>com.litongjava</groupId>
    <artifactId>hotswap-classloader</artifactId>
    <version>${hotswap-classloader.version}</version>
  </dependency>
</dependencies>

這將確保您的項(xiàng)目能夠使用 hotswap-classloader。

2. 創(chuàng)建啟動(dòng)類

創(chuàng)建一個(gè)簡(jiǎn)單的啟動(dòng)類 HelloApp 來使用 tio-boot 啟動(dòng)您的應(yīng)用。這個(gè)類將定義一個(gè)基本的 HTTP 請(qǐng)求路徑和一個(gè)處理方法:

package com.litongjava.tio.web.hello;
// 導(dǎo)入必要的類
@ComponentScan
@Controller
@RequestPath("/")
public class HelloApp {
  public static void main(String[] args) {
    tio-boot.run(HelloApp.class, args);
  }
  @RequestPath()
  public String index() {
    return "index4";
  }
}

這個(gè)類中的 main 方法將啟動(dòng) tio-boot,而 index 方法將響應(yīng)根路徑的 HTTP 請(qǐng)求。

3. 配置類加載器

創(chuàng)建 HotSwapClassLoaderConfig 類以配置動(dòng)態(tài)類加載器。這個(gè)配置類在服務(wù)器啟動(dòng)之前設(shè)置自定義的類加載器,以便于開發(fā)環(huán)境下的熱替換:

package com.litongjava.tio.web.hello.config;
import com.litongjava.hotswap.kit.HotSwapUtils;
import com.litongjava.jfinal.aop.Aop;
import com.litongjava.jfinal.aop.annotation.BeforeStartConfiguration;
import com.litongjava.jfinal.aop.annotation.Initialization;
import com.litongjava.tio.boot.constatns.ConfigKeys;
import com.litongjava.tio.boot.utils.Enviorment;
import lombok.extern.slf4j.Slf4j;
@BeforeStartConfiguration
@Slf4j
public class HowSwapClassLoaderConfig {
  @Initialization
  public void configClassLoader() {
    Enviorment enviorment = Aop.get(Enviorment.class);
    String env = enviorment.get(ConfigKeys.appEnv);
    if ("dev".equals(env)) {
      // 獲取自定義的classLoalder
      ClassLoader hotSwapClassLoader = HotSwapUtils.getClassLoader();
      Thread.currentThread().setContextClassLoader(hotSwapClassLoader);
      log.info("hotSwapClassLoader:{}", hotSwapClassLoader);
    }
  }
}

這里的配置邏輯將檢查應(yīng)用環(huán)境,并在開發(fā)環(huán)境下設(shè)置自定義的類加載器。

4. 實(shí)現(xiàn)服務(wù)器監(jiān)聽器

創(chuàng)建 MyServerListener 類,該類實(shí)現(xiàn)了 TioBootServerListener 接口。在服務(wù)器啟動(dòng)完成后,這個(gè)類將啟動(dòng) HotSwapWatcher 來監(jiān)聽類文件的變化:

package com.litongjava.tio.web.hello.config;
import com.litongjava.hotswap.watcher.HotSwapWatcher;
import com.litongjava.hotswap.wrapper.tio.boot.TioBootArgument;
import com.litongjava.hotswap.wrapper.tio.boot.TioBootRestartServer;
import com.litongjava.jfinal.aop.Aop;
import com.litongjava.jfinal.aop.AopManager;
import com.litongjava.tio.boot.constatns.ConfigKeys;
import com.litongjava.tio.boot.context.Context;
import com.litongjava.tio.boot.server.TioBootServerListener;
import com.litongjava.tio.boot.utils.Enviorment;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyServerListener implements TioBootServerListener {
  protected static volatile HotSwapWatcher hotSwapWatcher;
  @Override
  public void boforeStart(Class<?>[] primarySources, String[] args) {
  }
  @Override
  public void afterStarted(Class<?>[] primarySources, String[] args, Context context) {
    Enviorment enviorment = Aop.get(Enviorment.class);
    String env = enviorment.get(ConfigKeys.appEnv);
    if("dev".endsWith(env)) {
      TioBootArgument tioBootArgument = new TioBootArgument(primarySources, args, context, true);
      AopManager.me().addSingletonObject(tioBootArgument);
      if (hotSwapWatcher == null) {
        // 使用反射執(zhí)行下面的代碼
         log.info("start hotSwapWatcher");
        hotSwapWatcher = new HotSwapWatcher(new TioBootRestartServer());
        hotSwapWatcher.start();
      }
    }
  }
}

在 afterStarted 方法中,如果處于開發(fā)環(huán)境,則啟動(dòng) HotSwapWatcher。

5. 注冊(cè)服務(wù)器監(jiān)聽器

最后,編寫 TioBootServerListenerConfig 類來在啟動(dòng)前將 TioBootServerListener 添加到 Aop 容器中:

package com.litongjava.tio.web.hello.config;
import com.litongjava.jfinal.aop.annotation.Bean;
import com.litongjava.jfinal.aop.annotation.BeforeStartConfiguration;
import com.litongjava.tio.boot.server.TioBootServerListener;
@BeforeStartConfiguration
public class TioBootServerListenerConfig {
  @Bean
  public TioBootServerListener tioBootServerListener() {
    return new MyServerListener();
  }
}

這將確保 MyServerListener 能夠正確注冊(cè)并在應(yīng)用啟動(dòng)時(shí)被調(diào)用。

6.測(cè)試加載效果

如果是Eclipse IDE,保持一個(gè)文件即可測(cè)試加載效果,如果是IDEA環(huán)境需要再運(yùn)行時(shí)手動(dòng)編譯(Build-->Recompile)文件才可以看到效果

源碼地址
https://github.com/litongjava/java-ee-tio-boot-study/tree/main/tio-boot-latest-study/tio-boot-env-study

tio-boot文檔

https://litongjava.github.io/tio-boot-docs/

以上就是tio-boot整合hotswap-classloader實(shí)現(xiàn)熱加載方法實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于tio-boot hotswap-classloader熱加載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論