Было предложение Java EE 7 spe c о поддержке псевдонима пароля , но оно так и не вошло в спецификацию. Поэтому нет возможности заменить переменные в стандартном и портативном (работающем на каждом Java EE-совместимом сервере) способом.
К счастью, разные серверы приложений предлагают собственное решение для достижения этой цели.
Для Wildfly вы должны сначала включить замену свойств аннотации внутри вашего standalone.xml
:
<subsystem xmlns="urn:jboss:domain:ee:5.0">
<annotation-property-replacement>true</annotation-property-replacement>
</subsystem>
Теперь вы можете начать замену переменных (синтаксис ${ENV_VARIABLE:default}
):
@DataSourceDefinition(
name = "java:app/jdbc/pqsql",
className = "org.postgresql.xa.PGXADataSource",
user = "${DB_USER:postgres}",
password = "${DB_PASSWORD:password}",
serverName = "${DB_SERVERNAME:localhost}",
portNumber = 5432,
databaseName = "${DB_DATABASENAME:testdatabase}")
Вы можете найти дополнительную информацию здесь .
ОБНОВЛЕНИЕ : Я пробовал это с последняя версия Wildfly (20.0.0.Final), и кажется, что есть ошибка при замене переменных аннотации . В качестве запасного варианта вы можете использовать традиционный способ указания источника данных с помощью Jboss CLI и использовать переменные среды, как ожидалось :
# First create the new module for the JDBC driver
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql, driver-class-name=org.postgresql.Driver, driver-datasource-class-name=org.postgresql.ds.PGPoolingDataSource)
# Create a data source
/subsystem=datasources/data-source=PostgresDS:add(jndi-name=java:jboss/datasources/postgres, driver-name=postgresql, connection-url=jdbc:postgresl://localhost:5432/postgres, user-name=postgres, password=postgres)