У меня был установлен tomcat8 в инстансе AWS, созданном с использованием AMI Amazon Linux 1. Внутри tomcat.conf я добавил переменные, которые устанавливались с помощью подстановки команд $() для чтения параметров из хранилища параметров AWS с информацией об URL-адресе базы данных, имени и т. д. Это отлично сработало. Каждый раз, когда запускался tomcat, он запускал и анализировал команды и устанавливал переменные среды на основе текущих значений хранилища параметров. Затем это можно использовать в Spring bean для подключения к базе данных.
Недавно мне пришлось перейти на использование Amazon Linux 2 AMI. Я понял, как установить Tomcat (8.5), но теперь он работает как служба systemctl. Когда это запускается, он читает текст подстановки команды как есть, поэтому переменные среды в конечном итоге устанавливаются как «$ (.....)», что, очевидно, не работает.
Если я вручную запускаю /usr/libexec/tomcat/servers start
, он выполняет замену, но когда я запускаю systemctl start tomcat.service, это не так.
Я пытался использовать jsvc, но это не имеет значения. Я могу распечатать одну из переменных в /usr/libexec/tomcat/preamble
сразу после того, как она будет прочитана в tomcat.conf, и она не выполняет подстановку команд.
Кто-нибудь знает, почему это больше не работает? Есть ли способ установить переменные среды во время выполнения для tomcat так, как это работало раньше?