Не создавать пустые каталоги в файле war

Мне нужно создать несколько пустых каталогов в моем веб-приложении для будущего использования. В моей IDE я их создал, но когда я запустил свое приложение, эта папка не создается и не существует в файле war приложения.

Как я могу создать эти пустые папки в военном файле во время выполнения?

Я знаю, что добавление файла (например, файла.empty) решит мою проблему, но это не очень хорошее решение.

1 ответ

Не думайте, что вы когда-нибудь сможете писать в файловую систему в том месте, где распакован ваш.war. Нет гарантии, что.war будет даже распакован, или, если он есть, где он будет распакован.

Вам лучше использовать внешний каталог, настроенный с помощью параметра контекста сервлета, и использовать его для своего хранилища.

Если вы используете Java-сервлеты (я просто предполагаю, поскольку это Java-приложение, работающее в Tomcat, как я читал), вы можете реализовать интерфейс ServletContextListener для запуска собственного кода в событии контекста, например, для создания папок

public class MyListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        
       // check existence or create your folders
       // this is the code that will be run on context init

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

       // here you can run custom code when the context is destroyed

    }
}

Конечно, вам нужно добавить все необходимые дескрипторы в ваш файл web.xml, большинство IDE сделают это за вас, вы можете иметь свои собственные параметры или путь для загрузки файла свойств, но в любом случае вот фрагмент:

<listener>
    <description>ServletContextListener</description>
    <listener-class>org.your.package.MyListener</listener-class>
</listener>
    <context-param>
    <param-name>your:param-name</param-name>
    <param-value>value</param-value>
</context-param>
<context-param>
    <param-name>your:config-file</param-name>
    <param-value>path/to/config.properties</param-value>
</context-param>

надеюсь, я не опоздал. Я использовал эту стратегию раньше с QuartzScheduler для настройки групп заданий резервного копирования / предупреждений, работающих в фоновом режиме.

Другие вопросы по тегам