@DataJpaTest如何指定要扫描的存储库和实体

时间:2018-09-10 13:26:13

标签: spring-boot spring-data-jpa spring-data spring-boot-test

默认情况下,@DataJpaTest扫描所有jpa存储库和@Entity。就我而言,我有5个存储库软件包和5个实体软件包。例如

com.acme.product.entitycom.acme.product.repository com.acme.users.entitycom.acme.users.repository com.acme.client.entitycom.acme.client.repository

以此类推。...

我想在一个单独的类中测试每个部分。例如

@RunWith(SpringRunner.class)
@DataJpaTest
//Some configurations to import only product repositories and product entities
public class TestProductRepository {
  @Autowired
  TestEntityManager entityManager;
}

请注意,我已经配置了5种不同的EntityManager,我想将其导入并在productEntityManager中使用TestProductRepository,而不是默认的TestEntityManager储存库/实体。

非常感谢

1 个答案:

答案 0 :(得分:0)

这是我设法实现想要的目标的方法:

@ActiveProfiles( "dev" )
@RunWith( SpringRunner.class )
@DataJpaTest
// Exclude the default test database + the default EntityManager in purpose to use my configurations instead.
@AutoConfigureTestDatabase( connection = H2, replace = AutoConfigureTestDatabase.Replace.AUTO_CONFIGURED )
@Import( {
    ProductDataBaseConfig.class,//Import ProductEntityManager and other beans related to DB operations like TransactionManager, etc...
    ProductRepositoryContainer.class //Custom bean containing all product repositories
} )
public class TestProductRepository {
  @Autowired
  private TestEntityManager entityManager; 

}

这里重要的是@AutoConfigureTestDatabase(...)@Import(...),因为我替换了自动配置的bean并导入自己的ProductEntityManagerTestEntityManager使用提供的配置。 这也减小了@DataJpaTest的范围,该范围不扫描类路径中的所有实体和存储库,而这正是我想要的。