Вы можете обновить свойства в единице сохранения, предоставив карту (см. this).
Удобно, переменные окружения можно получить в виде Карты (см. this).
Поместите эти два вместе, и вы можете динамически обновлять свойства в своем устройстве персистентности с помощью переменных окружения.
EDIT: простой пример ...
persistence.xml ...
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
<provider>
oracle.toplink.essentials.PersistenceProvider
</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="toplink.logging.level" value="INFO"/>
<property name="toplink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="toplink.jdbc.url" value="jdbc:oracle:thin:@myhost:l521:MYSID"/>
<property name="toplink.jdbc.password" value="tiger"/>
<property name="toplink.jdbc.user" value="scott"/>
</properties>
</persistence-unit>
код, который обновляет persistence.xml блок "по умолчанию" с переменными окружения ...
Map<String, String> env = System.getenv();
Map<String, Object> configOverrides = new HashMap<String, Object>();
for (String envName : env.keySet()) {
if (envName.contains("DB_USER")) {
configOverrides.put("toplink.jdbc.user", env.get(envName)));
}
// You can put more code in here to populate configOverrides...
}
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("default", configOverrides);
Данные о базах данных, такие как имя хоста, не должны определяться в вашем файле persistence.xml. Используйте JNDI-запросы и определите конкретные параметры базы данных на сервере приложений ... – home
Привет, Извините, что я не использую сервер приложений здесь, я запускаю автономное приложение, поэтому мне нужно жестко настроить данные базы данных в файле persistence.xml , – Ran
Вы хотите получить данные базы данных из переменных окружения или из persistence.xml? Это похоже на то, что вы говорите, что хотите получить их от обоих, но это не совсем понятно ... –