Хотя ответ @atline является правильным для более старых выпусков Liberty, так как вопрос выполняется в контейнерах Docker, они, скорее всего, работают на версии Liberty с 19.0.0.3, которая имеет другое поведение в отношении разрешения переменных.
Начиная с 19.0.0.3 разрешение переменной среды не требовало env.префикс и не требует, чтобы имя переменной было в верхнем регистре.Как описано в этой ссылке
переменные окружения могут быть доступны как переменные.Начиная с 19.0.0.3 к ним можно получить прямой доступ, ссылаясь на имя переменной среды.Если переменная не может быть разрешена, пробуются следующие преобразования в имени переменной среды:
- Заменить все не-буквенные символы на
_
- Измените все символы на верхний регистр.
Если вы введете $ {my.env.var} в server.xml, он будет искать переменные среды со следующими именами:
- my.env.var
- my_env_var
- MY_ENV_VAR
При использовании выпуска Liberty старше 19.0.0.3 к переменным среды можно получить доступ, добавив env.к началу имени переменной среды:
<httpEndpoint id="defaultHttpEndpoint"
host="${env.HOST}"
httpPort="9080" />
Исходя из вопроса, кажется, что значение указывается в bootstrap.properties, а также в переменных окружения, а bootstrap.properties переопределяет переменные окружения:
Вы можете параметризовать конфигурацию сервера, используя переменные.При разрешении имен переменных используются следующие источники в порядке возрастания приоритетов:
- значения переменных по умолчанию server.xml
- переменные среды
- bootstrap.properties
- Свойства системы Java
- server.xml config
Чтобы получить их для чтения из докера, необходимо удалить их из bootstrap.properties.Для вашего примера:
<dataSource name="XYZ" jndiName="jdbc/xyz" transactional="false">
<jdbcDriver id="OracleJdbcDriver" libraryRef="xyzLib"/>
<properties.oracle URL="${db.url}" user="${db.username}" password="${db.password}"/>
</dataSource>
если вы удалите определение db.url
, db.password
и db.username
из bootstrap.properties
, тогда вы можете запустить образ докера следующим образом:
docker run -d -e db_url=xxx -e db_username=xx -e db_password=x your_image
Если вы хотите, чтобы значения по умолчанию были определены, если они не указаны, вы можете добавить это к вашему server.xml
:
<variable name="db.url" defaultValue="jdbc:XXX"/>
<variable name="db.username" defaultValue="testUser"/>
<variable name="db.password" defaultValue="testPassword that will be encoded or encrypted"/>
Если вы хотите закодировать или зашифровать пароль, чтобы он не был вВы можете использовать обычный текст:
securityUtility encode --encoding=[xor|aes]
полная справка для всех опций доступна при запуске:
securityUtility help encode