根据生产或测试环境,在Eclipse中使用不同的JPA.persistence.xml

时间:2015-08-10 14:02:56

标签: java eclipse jpa junit

我们正在使用gradle并拥有默认的项目结构:

/src
   /main
     /java
     /resources
       /META-INF
         persistence.xml
   /test
     /java
     /resources
       /META-INF
         persistence.xml

虽然我们使用gradle运行junit测试,但一切都很好(我们没有任何关于源路径等的特殊gradle配置):来自' test'的persistence.xml。使用。

但是如果我们尝试使用eclipse运行我们的junit测试,那么总是来自' main'的peristence.xml。使用。

我们如何配置eclipse以使用来自' main'的persistence.xml?对于一个启动配置,但来自' test'的persistence.xml所有junit测试?

2 个答案:

答案 0 :(得分:1)

如果这是关于从类路径加载的资源的一般问题,那么尝试另一件事:

在Eclipse的项目属性Java Build Path-> Order and Export中,将测试文件夹放在src文件夹上。

然后在“部署程序集”下,排除测试文件夹

这将确保当您直接从Eclipse中启动测试时,您将首先在测试文件夹中搜索类路径资源。但是,当您作为Web应用程序启动时,测试文件夹将从WEB-INF/classes中排除。

答案 1 :(得分:0)

我用一个persistence.xml和不同的持久性单元解决了这个问题。

<persistence-unit name="MAIN">
  ...
</persistence-unit>

<persistence-unit app="TEST">
  ...
</persistence-unit>

然后在您的应用中,您将使用

注入主持久性单元
@PersistenceContext(name="MAIN", unitName="MAIN")
private EntityManager entityManager;

对于单元测试,您将使用TEST持久性单元显式创建一个EntityManager,并将其手动注入被测对象:

EntityManager em = Persistence.createEntityManagerFactory("TEST").createEntityManager();
bean.setEntityManager(em);