我有一个在jboss上运行的java服务器应用程序。一旦启动应用程序(特别是bean初始化)有任何异常,我想杀死jboss进程。我想确保如果连接到DB(bean)有任何异常,应该杀死应用程序和jboss进程。我试过了System.exit(1)
,但它没有帮助。
解决了!!
谢谢@daveb。 我试过你的解决方案。有效!。但是调用外部脚本对我来说有点奇怪。我能够使用System.exit(1)本身杀死JBOSS进程。
关键是应该从新线程调用System.exit(1)。这样的事情。
Thread thread = new Thread(){
public void run(){
try {
System.exit(1);
} catch (Exception e) {
log.error("Exception while calling System.exit(1) {}",e);
}
}
};
thread.start();
答案 0 :(得分:1)
你可以将你的kill命令放在shell脚本中,并使用ProcessBuilder从java bean中调用它...这是一个例子...
String shutdownScript = "/etc/jboss-as/shutdown.sh";
try {
log.info("Executing shutdown script: {0}", shutdownScript);
String[] command = {"/bin/bash", shutdownScript};
ProcessBuilder p = new ProcessBuilder(command);
Process p2 = p.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream()));
String line;
log.info("Output of running " + command + " is: ");
while ((line = br.readLine()) != null) {
log.info(line);
}
} catch (Exception e) {
log.error("Unable to execute instance shutdown script: "+ExceptionUtils.getFullStackTrace(e));
}
更清洁的解决方案(如果您使用的是JavaEE)将创建一个@Startup bean并运行一些数据库检查,如果数据库连接关闭,您可以抛出一个StartException,它将自动为您取消部署应用程序,例如。 ...
throw new StartException("Could not initialise DB connection");