Основная цель — чтобы не было проблем при деплое новой версии (т.е. конфиг должен сохраниться). Конфиг в общем случае это соединение с БД; некие пары ключ=значение и файлы. Плюс: при локальной разработке это тоже должно настраиваться достаточно удобно.
Пробовал хранить в conf/Catalina/localhost/app.xml (при локальной разработке в src/main/webapp/META-INF/context.xml) но проблема в том, что если через консоль manager удалить приложение (чтобы задеплоить новую версию), то этот файл при удалении приложения тоже удаляется. Понятно, что "тупо" хранить в webapps/app/WEB-INF/classes/config.properties так себе вариант, т.к. усложняется деплой, вместо того, чтобы закинуть одну варку, надо уже лепить скрипты. Делал отдельный tomcat-base и настраивал хитрым образом classpath так, что conf/app был в classpath запущенного приложения, в принципе этот вариант мне больше всех понравился (для локальной разработки конфиги в src/main/resources), но слишком сложная процедура, хочется с минимумом усилий деплоить на только что распакованный томкат.
Re: Как правильно хранить конфиг для томкат-приложения?
Переменные окружения давно уже best practice для передачи начальных параметров конфигурации. Если конфиг большой и через окружение его передавать неудобно, то скорее всего что-то не так в архитектуре.
Re: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, vsb, Вы писали:
vsb>Основная цель — чтобы не было проблем при деплое новой версии (т.е. конфиг должен сохраниться). Конфиг в общем случае это соединение с БД; некие пары ключ=значение и файлы. Плюс: при локальной разработке это тоже должно настраиваться достаточно удобно.
Локальный проперти файл, но не в Томкате, а в юзерской папке.
Переменные окружения, как тут посоветовали, — отстой. В какой-то момент потребуется держать запущенными 2 версии (старую и новую или примари/секондари) и тут ты лососнёшь тунца с настройкой окружения.
А вообще, зачем выделенный Томкат? Почему нельзя СпрингБут с Томкатом внутри?
Re[2]: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, bzig, Вы писали:
B>Локальный проперти файл, но не в Томкате, а в юзерской папке.
B>Переменные окружения, как тут посоветовали, — отстой. В какой-то момент потребуется держать запущенными 2 версии (старую и новую или примари/секондари) и тут ты лососнёшь тунца с настройкой окружения.
Эмм. Два пользователя делать умеем а переменные им разные не умеем? В виртуализацию очевидно тоже не умеем.
WBR, Igor Evgrafov
Re[3]: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, GarryIV, Вы писали:
GIV>Здравствуйте, bzig, Вы писали:
B>>Локальный проперти файл, но не в Томкате, а в юзерской папке.
B>>Переменные окружения, как тут посоветовали, — отстой. В какой-то момент потребуется держать запущенными 2 версии (старую и новую или примари/секондари) и тут ты лососнёшь тунца с настройкой окружения.
GIV>Эмм. Два пользователя делать умеем
Зачем два пользователя? -Duser.dir=...
GIV> В виртуализацию очевидно тоже не умеем.
Виртуализация новая фишка, не так широко распространена.
GIV>а переменные им разные не умеем?
Умеем. Просто понимаем, что это труднее поддерживать, и тем труднее, чем больше команда. Файл один раз объяснил где лежит и всё. Любой может посмотреть, с чем программа запущена.
EXPORT a=b
EXPORT c=d
java ....
Ищи потом концы, в списке процессов только java
Re[2]: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, bzig, Вы писали:
B>Переменные окружения, как тут посоветовали, — отстой. В какой-то момент потребуется держать запущенными 2 версии (старую и новую или примари/секондари) и тут ты лососнёшь тунца с настройкой окружения.
А в чём проблема? Я сейчас томкат запускаю через systemd сервис, там и прописываю переменные окружения. В принципе проблем прописать там переменные конфига вроде нет.
B>А вообще, зачем выделенный Томкат? Почему нельзя СпрингБут с Томкатом внутри?
Не выношу этого спринг бута. Какой-то уродский проект. Принципиально не юзаю. Обычный спринг юзаю, а бут — нет. Слишком сложно всё наворотили. Несколько раз пытался осилить, так и не осилил, не по уму сделано.
Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, bzig, Вы писали:
B>>Переменные окружения, как тут посоветовали, — отстой. В какой-то момент потребуется держать запущенными 2 версии (старую и новую или примари/секондари) и тут ты лососнёшь тунца с настройкой окружения.
vsb>А в чём проблема? Я сейчас томкат запускаю через systemd сервис, там и прописываю переменные окружения. В принципе проблем прописать там переменные конфига вроде нет.
А из ИДЕИ запуская, тоже прописываешь ей все переменные? Уже два места прописывать.
Я так помню, ты фрилансер, значит опыт командной разработки примерно отсутствует? Тогда да, можно позволить себе совать переменные окружения во все места.
B>>А вообще, зачем выделенный Томкат? Почему нельзя СпрингБут с Томкатом внутри?
vsb>Не выношу этого спринг бута. Какой-то уродский проект. Принципиально не юзаю. Обычный спринг юзаю, а бут — нет. Слишком сложно всё наворотили. Несколько раз пытался осилить, так и не осилил, не по уму сделано.
Сочувствую.
Re[4]: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, bzig, Вы писали:
vsb>>Здравствуйте, bzig, Вы писали:
B>>>Переменные окружения, как тут посоветовали, — отстой. В какой-то момент потребуется держать запущенными 2 версии (старую и новую или примари/секондари) и тут ты лососнёшь тунца с настройкой окружения.
vsb>>А в чём проблема? Я сейчас томкат запускаю через systemd сервис, там и прописываю переменные окружения. В принципе проблем прописать там переменные конфига вроде нет.
B>А из ИДЕИ запуская, тоже прописываешь ей все переменные? Уже два места прописывать.
Как я это вижу: есть конфиг-файл, в котором всё прописано. В идее надо будет дописать отличия (например IP-адрес своей локальной БД, если она не на 127.0.0.1).
B>Я так помню, ты фрилансер, значит опыт командной разработки примерно отсутствует? Тогда да, можно позволить себе совать переменные окружения во все места.
Ну вот товарищи выше говорят, что так делают. Я потому и спрашиваю — интересно, как люди делают. Раз делают, значит не самый плохой вариант.
B>>>А вообще, зачем выделенный Томкат? Почему нельзя СпрингБут с Томкатом внутри?
vsb>>Не выношу этого спринг бута. Какой-то уродский проект. Принципиально не юзаю. Обычный спринг юзаю, а бут — нет. Слишком сложно всё наворотили. Несколько раз пытался осилить, так и не осилил, не по уму сделано.
B>Сочувствую.
А чего мне сочувствовать. Я как раз радуюсь жизни, т.к. не приходится разбираться с магией, которой в этом спринг буте накрутили от души.
Re[4]: Как правильно хранить конфиг для томкат-приложения?
GIV>> В виртуализацию очевидно тоже не умеем. B>Виртуализация новая фишка, не так широко распространена.
AWS EC2 — 2006 год, Docker — 2013 год. Сегодня — 2019 год.
B>Умеем. Просто понимаем, что это труднее поддерживать, и тем труднее, чем больше команда.
DevOps как специализация существует уже лет 10, и на эти вопросы давно даны ответы (большая команда в принципе не должна работать с большими конфигами). Если для вас современные best practices являются проблемой, скорее всего вы вынуждены работать с одним из прошлых поколений архитектур и процессов и ответ на вопрос "как правильно" (подразумевающий "правильно сегодня") вам естественно не интересен. Соответственно, стоило бы спросить "как правильно вчера" и объяснить, почему вы ещё там.
Re: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, vsb, Вы писали:
vsb>Основная цель — чтобы не было проблем при деплое новой версии (т.е. конфиг должен сохраниться). Конфиг в общем случае это соединение с БД; некие пары ключ=значение и файлы. Плюс: при локальной разработке это тоже должно настраиваться достаточно удобно.
Вообще говоря. Сейчас стандарт — это деплой через Docker контейнер в какой нидь кластер. Типа Kubernetes, OpenShift, AWS и т.д. Так вот, для кластера самое удобное — это конфиги в переменных окружения. По крайней мере я пока недостатков в этом решении не вижу, лично мне жить вполне комфортно и никаких болей нет.
Re[2]: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, elmal, Вы писали:
E>Вообще говоря. Сейчас стандарт — это деплой через Docker контейнер в какой нидь кластер. Типа Kubernetes, OpenShift, AWS и т.д. Так вот, для кластера самое удобное — это конфиги в переменных окружения. По крайней мере я пока недостатков в этом решении не вижу, лично мне жить вполне комфортно и никаких болей нет.
Я в общем в итоге пришел к тому, что конфиг класть в META-INF/context.xml в JNDI-дерево. Для деплоя надо вручную распаковать jar-файл и заменить там этот файл боевым (ну как вручную, батником, конечно).
Переменные окружения это слишком странно для меня. Докером не пользуюсь.
Вообще по идее лучше всего класть в conf/localhost/Catalina/appname.xml но почему-то томкат удаляет этот файл при андеплое приложения. Такой бред.
Re[3]: Как правильно хранить конфиг для томкат-приложения?
Здравствуйте, vsb, Вы писали:
vsb>Я в общем в итоге пришел к тому, что конфиг класть в META-INF/context.xml в JNDI-дерево.
Ну, таким решением я пользовался лет 10 назад . Потом тупо конфиг клал внутрь war, а потом, когда открыл для себя Docker, использую переменные окружения. И параметры по умолчанию, когда гоняю все на локальной машине, а переменные не указаны .