繁体   English   中英

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

Prevent (tomcat) web application from starting if configuration incomplete

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

如何在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 个回复

我将使用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>

一个想法(但可能还有其他想法)是实现一个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。 不能完全停止部署过程。 如果有人想对此进行微调,则可以编辑我的帖子。

1 在Web应用程序中父项不完整时保留子对象

我正在尝试建立最佳实践,以在父对象不完整或Web应用程序中不存在时处理创建子对象。 我想以无状态的方式处理此问题,以便内存中的对象消失。 例如,假设我们有一个错误跟踪应用程序。 Bug包含标题和描述(均为必需)以及任意数量的附件。 因此,“错误”是具有“附件”子项列表的父对象。 ...

2008-12-01 04:18:04 3 117   oop
2 Azure CLI返回不完整的Web应用程序列表

多年来,我一直在构建使用Portal和Visual Studio在Azure上运行的应用程序,对此我感到非常满意,但是在看到Scott Gutherie演示了命令行工具之后,我决定尝试一下。 当我尝试获取我的Web应用程序列表时,该列表不完整。 az webapp list返回我帐户中拥 ...

4 “ cordova run ubuntu”产生不完整的应用程序

我正在尝试为ubuntu平台构建和运行cordova项目。 该项目只是我创建新项目时自动生成的默认项目。 这是config.xml文件(我将包含链接链接的行添加到了图标): 当我在浏览器中查看index.html文件时,我看到了cordova徽标和一个闪烁的按钮,显示“正在连接设备” ...

5 如何解决“从应用程序收到的回复不完整”

我一定疯了... 如果我的views.py文件包含48行或更少的行,则在向其中发布数据时,我会看到 收到来自申请的不完整回复 但是,如果我有49行或更多,我会得到一个 NameError,“请求”未定义 即使第31/49行为空,也会在第31和49行抛出该 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM