#java #tomcat #synchronization #servlet-filters
#java #tomcat #синхронизация #servlet-фильтры
Вопрос:
При использовании «глобального» фильтра, который находится в корневом каталоге библиотеки веб-сервера apache tomcat и применяется ко всем контекстам веб-приложений: мне было интересно, инициализируются ли контексты веб-приложений синхронно — по одному за раз, или может быть случай, когда Filter.init()функция вызывается двумя разными контекстами одновременно.
Я спрашиваю об этом, так как я хочу инициализировать объект конфигурации подключения к базе данных на основе определенного FilterConfig.initParameter первый раз, когда init() вызывается любым из контекстов приложения, и мне интересно, должен ли я поместить вышеуказанное в синхронизированный блок или нет…
Ответ №1:
Я думаю, что это внутренности Tomcat, это может измениться в любое время, поэтому я бы сделал это в синхронизированном блоке. Это не имеет большого значения или проблемы с производительностью, поскольку оно выполняется только один раз для инициализации контекста приложения.
Из спецификации Java Servlet 6.2.1 Жизненный цикл фильтра:
Для каждой JVM контейнера создается только один экземпляр для каждого объявления <filter> в дескрипторе развертывания.
Вы могли бы достичь того же результата с помощью пользовательского клапана: