java - 重新加载修改类时如何让jetty阻止请求?

标签 java web jetty hotswap dcevm

我正在使用 dcevm + run-jetty-run + livereload , 尝试在修改 java 源代码时开发一个 web 应用程序而无需重新启动 jetty 。

一切正常。当我修改一个java类时,livereload监听到变化,并触发浏览器刷新打开的页面,看到修改后的结果。

但我发现还是不太方便:当浏览器重新加载时,dcevm 和 jetty 可能还没有重新加载修改过的类。不得不再次手动刷新页面,但我没有仔细检查内容,不确定这次是否显示修改后的结果。

所以我想知道当我修改了一些类并且dcevm正在重新加载时,有什么方法可以让jetty阻止请求。它将确保显示的页面始终被修改。

最佳答案

这可能对您的味觉来说太古怪了,但是您可以在 Java 源代码中插入一个静态初始化片段,以便在重新加载后更新一个已知的单独文件。比 livereload 可以观察那个单独的文件,而不是让它直接在 .java 源上工作。

类似的东西:

public class ReloadUtils {
  public static void notifyUpdate(String className) {
    String baseDir = System.getProperty("DEV_MODE_BASEDIR") + "/";
    File file = new File(baseDir + className + ".updated");
    FileWriter fw = new FileWriter(file.getAbsoluteFile(), false); // overwrite instead of append
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(Long.toString(System.currentTimeMillis()));
    bw.close();
  }
}

public class Reloadable {

  private final static boolean DEV_MODE = System.getProperty("DEV_MODE").equals("true");

  static {
    // static finals trigger most compilers to remove the statements in this case
    if (DEV_MODE) { 
      ReloadUtils.notifyUpdate(Reloadable.class.getName());
    }
  }

  /* lots of useful stuff */
}

关于java - 重新加载修改类时如何让jetty阻止请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10292097/

相关文章:

java - Spring boot - 在保存对象时根据id字段保存非id字段

java - wait() 调用时出现 IllegalMonitorStateException

html - 内部重定向站点的最佳解决方案

java - 转码只有在客户端超时后才完成?

javascript - 对 javascript 文件的 Expressjs GET 请求作为文本/html

Tomcat:源服务器未找到目标资源的当前表示或不愿意透露存在该表示

java - 通过命令行将系统属性传递给 Jetty runner

java - 关闭上下文时出现 Jetty 错误 : java. lang.IllegalStateException : IDLE, initial

spring - 以编程方式设置 Jetty Spring 轮廓

java - 是什么导致 UsbRequest 从队列方法抛出 IO 异常?