如何在java应用程序中杀死bean初始化失败的jboss

时间:2018-02-20 17:08:43

标签: java exception-handling jboss jboss7.x

我有一个在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();

1 个答案:

答案 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");