如何在Web应用程序启动(Tomcat或其他)上设置“配置检查”,并且如果不满足条件,则不应启动应用程序。
比方说,应用程序要求文件/ tmp / dummy在fs上存在才能启动。所以我有类似的东西
public class TestConfig {
public static void TestServerConfiguration() {
if (! new File("/tmp/dummy").exists()) {
// don't start this web application ...
}
}
}
我应该在哪里进行这项测试?
谢谢!
答案 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。不能完全停止部署过程。如果有人想对此进行微调,则可以编辑我的帖子。