在persistence.xml文件中读取环境变量

我想读取persistence.xml文件中的环境变量。

想法是我不希望从属性文件中读取我的数据库详细信息,因为获取属性文件覆盖更改。相反,我想从环境变量中读取详细信息。

有没有办法达到这个标准。

我使用Spring 3,我的独立应用程序将部署在unix机器中。

您可以通过提供Map来更新持久性单元中的属性(请参阅此内容 )。

方便的是,环境变量可以作为Map检索(参见本文 )。

将两者放在一起,您可以使用环境变量动态更新持久性单元中的属性。

编辑:简单的例子……

persistence.xml中…

  oracle.toplink.essentials.PersistenceProvider  false         

使用环境变量更新persistence.xml“default”单元的代码…

 Map env = System.getenv(); Map configOverrides = new HashMap(); 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); 

我不认为这将涵盖通过注射创建的EMs。 更糟糕的是,我认为通过EMF创建的EM只能是EXTENDED(例如等同于注释@PersistenceContext(type = PersistenceContextType.TRANSACTION)而不是EXTENDED),因此如果需要事务EM,则必须使用注入。

我想知道是否可以在运行时物理重写persistence.xml文件。 问题一是,重写文件的能力(权限,能够在META-INF等中获得它),其次,在JPA首次打开它之前重写它(我认为这是第一次注入EM时字段实际上由应用程序代码引用)