Ale*_*lex 5 java windows-services
我有一个用 Java 编写的服务器,它作为 Windows 服务运行(感谢 Install4J)。我希望这个服务能够下载它运行的 JAR 文件的最新版本,并开始运行新代码。关键是我不希望 Windows 服务完全退出。
理想情况下,我会通过 unix 样式的 exec() 调用来停止当前版本并运行新版本来完成此操作。我怎样才能最好地做到这一点?
这是一种复杂但可移植的方法。
将您的代码分成两个 jar。一个非常小的罐子只是用来管理进程启动的。它创建一个类加载器,将另一个 jar 保存在其类路径上。
当您想要加载新版本时,您可以终止运行旧 jar 中代码的所有线程。清空旧 jar 中对类实例的所有引用。清空对加载旧 jar 的 ClassLoader 的所有引用。此时,如果您没有错过任何内容,旧的类和 ClassLoader 应该符合垃圾回收的条件。
现在,您可以使用指向新 jar 的新 ClassLoader 实例重新开始,并重新启动应用程序代码。
归档时间: |
|
查看次数: |
1385 次 |
最近记录: |