如果配置不完整,阻止(tomcat)Web应用程序启动

时间:2018-11-14 18:52:26

标签: tomcat web-applications startup

如何在Web应用程序启动(Tomcat或其他)上设置“配置检查”,并且如果不满足条件,则不应启动应用程序。

比方说,应用程序要求文件/ tmp / dummy在fs上存在才能启动。所以我有类似的东西

public class TestConfig {

    public static void TestServerConfiguration()  {
        if (! new File("/tmp/dummy").exists()) {
            // don't start this web application ... 
        }
    }

}

我应该在哪里进行这项测试?

谢谢!

2 个答案:

答案 0 :(得分:2)

我会选择ServletContextListner。与servlet答案一样,它不会停止Tomcat,但会阻止Web应用程序加载。相对于servlet答案,优势之一是来自Javadoc:

  

在初始化Web应用程序中的任何过滤器或Servlet之前,所有ServletContextListener都会收到上下文初始化通知。

例如:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; 

@WebListener
public class FileVerifierContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // verify that the file exists.  if not, throw a RuntimeException
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
}

以上假设您的web.xml指定了Servlet 3.0或更高版本的环境(或者您根本没有web.xml):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>

如果您使用的是较低的servlet规范,则需要删除@WebListener批注并在web.xml中声明侦听器:

<web-app ...>
   <listener>
    <listener-class>
             com.example.package.name.FileVerifierContextListener 
        </listener-class>
   </listener>
</web-app>

答案 1 :(得分:0)

一个想法(但可能还有其他想法)是实现一个servlet,它将执行此检查并在条件为false时退出。您需要在上下文部署的开始时使用足够的启动时加载标签运行它。 web.xml会看起来像:

<servlet>
  <display-name>startup condition servlet</display-name>
  <servlet-name>startup condition</servlet-name>
  <servlet-class>com.xxx.yyy.ConditionChecker</servlet-class>
  <load-on-startup>1</load-on-startup>
  <init-param>
    <param-name>FILE_TO_CHECK</param-name>
    <param-value>/tmp/dummy</param-value>
  </init-param>
</servlet>

当不满足条件时(/ tmp / dummy不存在),该servlet可以执行System.exit(1)。 请不要这样会杀死Tomcat。不能完全停止部署过程。如果有人想对此进行微调,则可以编辑我的帖子。