我一直在谷歌搜索一个让我发送命令到正在运行的Java程序的方法,但大多数帖子建议实现listener
或用Jetty
包装程序(或其他服务器)实现。
有没有办法在不添加其他依赖项的情况下执行此操作?
情节是,我有一个Java程序,它将无限期地运行,并将产生一些正在运行的线程。我希望能够运行一个脚本来阻止它,当它需要关闭时,有点像关机脚本服务器往往有。这将允许我处理程序中的关闭过程。该程序在Linux环境中运行。
谢谢。
答案 0 :(得分:1)
实现了关闭钩子,到目前为止它看起来不错。实施代码:
final Thread mainThread = Thread.currentThread();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
logger.info("Shut down detected. Setting isRunning to false.");
if(processors != null && !processors.isEmpty()){
for (Iterator<IProcessor> iterator = processors.iterator(); iterator.hasNext();) {
IProcessor iProcessor = (IProcessor) iterator.next();
iProcessor.setIsRunning(false);
try {
iProcessor.closeConnection();
} catch (SQLException e1) {
logger.error("Error closing connection",e1);
}
}
}
try {
mainThread.join();
} catch (InterruptedException e) {
logger.error("Error while joining mainthread to shutdown hook",e);
}
}
});
感谢您的建议。