【问题标题】:How to store persistence.xml with other configuration files如何将 persistence.xml 与其他配置文件一起存储
【发布时间】:2012-09-20 17:29:14
【问题描述】:

我使用EclipseLink 作为我的JPA 实现。我们的项目有一个目录,我们保存所有配置文件,我想将我的 persistence.xml 文件存储在配置目录中,但找不到任何方法告诉createEntityManagerFactory 到那里查找持久性单元。

【问题讨论】:

  • 很奇怪的要求。为什么需要它?
  • 管理层希望所有配置都在同一个地方。我可以看到它的实用性。将配置文件放在 jar/war 文件中并没有什么意义。

标签: jpa eclipselink persistence.xml persistence-unit


【解决方案1】:

它不会直接回答您的问题,但是如果您想这样做以将应用程序的配置外部化,我认为最好的方法是将所有可配置属性(例如连接设置等)提取到一个单独的属性文件并将它们作为Map 传递给createEntityManagerFactory()(另请注意,您可以通过这种方式覆盖persistence.xml 的属性)。

那么您的persistence.xml 将只包含不可配置的设置(例如持久类列表等),即。 e.在不重建整个应用程序的情况下更改这些属性是没有意义的,您可以将其保留在默认位置。

【讨论】:

    【解决方案2】:

    您可以通过使用 spring-orm LocalContainerEntityManagerFactory 来实现这一点(如果您不想使用,则不需要使用所有 spring 上下文内容)。

    LocalContainerEntityManagerFactory lcemf = new LocalContainerEntityManagerFactory ();
    lcemf.setPersistenceUnitName("some_pu");
    lcemf.setpersistenceXmlLocation("file:/data/config.xml");
    EntityManagerFactory emf = lcemf.createNativeEntityManagerFactory();
    

    您也可以一劳永逸地忽略 xml,并使用 LocalContainerEntityManagerFactory 在代码中配置所有内容(请参阅 setPackagesToScan)。

    【讨论】:

      【解决方案3】:

      persistence.xml 必须始终存在于类路径的META-INF 目录中。更多关于不同类型的 java 应用程序的 META-INF 应该出现在哪里可以找到here

      持久性单元由 persistence.xml 配置文件定义。 META-INF 目录包含persistence.xml 的JAR 文件或目录称为持久单元的根。持久化单元的范围由持久化单元的根决定。

      每个持久性单元必须用一个对持久性单元的范围唯一的名称来标识。

      持久单元可以打包为 WAR 或 EJB JAR 文件的一部分,也可以打包为 JAR 文件,然后可以包含在 WAR 或 EAR 文件中。

      如果你将持久化单元打包为一个 EJB JAR 文件中的一组类,persistence.xml 应该放在 EJB JAR 的 META-INF 目录中。

      如果将持久性单元打包为 WAR 文件中的一组类,persistence.xml 应位于 WAR 文件的 WEB-INF/classes/META-INF 目录中。

      【讨论】:

      • 这个类路径和加载包的类路径一样吗?我尝试将 META-INF 目录放入我们的库所在的目录中,但它不起作用。如果我没有搞砸其他事情,这应该行吗?
      • 如果您解压 jar(使用 jar xvf myapp.jar),只要 META-INF 位于顶级目录中就可以了。
      • 但是 META-INF 必须在罐子里吗? (抱歉,我之前的问题表述得很糟糕。我曾尝试将它放在我从中加载外部库的目录中)
      • 对,META-INF 必须在 jar 中,作为顶级目录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多