Запретить запуск (tomcat) веб-приложения, если конфигурация не завершена - PullRequest
0 голосов
/ 14 ноября 2018

Как настроить «проверку конфигурации» при запуске веб-приложения (Tomcat или другое) и, если условие не выполняется, приложение не должно запускаться.

Допустим, для запуска приложения требуется, чтобы на fs существовал файл / tmp / dummy. Итак, у меня есть что-то вроде

public class TestConfig {

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

}

Где я должен включить этот тест?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я бы пошел с ServletContextListner .Как и в случае ответа сервлета, он не остановит Tomcat, но предотвратит загрузку веб-приложения.Одним из преимуществ перед ответом сервлета является Javadoc:

Все ServletContextListeners уведомляются об инициализации контекста до инициализации любых фильтров или сервлетов в веб-приложении.

Какпример:

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>

Если вы используете более низкую спецификацию сервлета, вам нужно удалить аннотацию @WebListener и объявить слушателя в web.xml:

<web-app ...>
   <listener>
    <listener-class>
             com.example.package.name.FileVerifierContextListener 
        </listener-class>
   </listener>
</web-app>
0 голосов
/ 14 ноября 2018

Одна идея (но могут быть и другие) - реализовать сервлет, который будет выполнять эту проверку и завершать работу, когда условие ложно. Вам необходимо запустить его в начале развертывания контекста с соответствующим тегом load-on-startup . 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>

Этот сервлет может выполнить System.exit(1), если условие не выполняется (/ tmp / dummy не существует). Пожалуйста, не это убьет Tomcat. Не совсем остановить процесс развертывания. Если кто-то захочет настроить это, вы можете отредактировать мой пост.

...