【问题标题】:How to prevent spring boot from auto creating instance of bean 'entityManagerFactory' at startup?如何防止spring boot在启动时自动创建bean'entityManagerFactory'的实例?
【发布时间】:2017-06-14 10:17:01
【问题描述】:

我正在开发一个使用 Spring JPAPostgreSQL 的 Spring Boot 应用程序。我正在使用@SpringBootTest(classes = <my package>.Application.class) 为控制器类初始化单元测试。

问题是这导致entityManagerFactory bean(以及许多其他与jpa、数据源、jdbc 等相关的对象)被创建,这对于单元测试来说是不需要的。有没有办法阻止 Spring 在第一次实际使用它们之前自动创建这些对象?

我花了很多时间试图只加载我的单元测试所需的 bean,但遇到了很多错误。我对 Spring 比较陌生,我希望其他人之前遇到过这个问题......并且可以提供帮助。如果需要,我可以发布代码 sn-ps。

更新:我不确定是否应该编辑或回答我自己的问题...选择编辑,因为我最终改变了我的单元测试方法。我将此添加到我的测试配置类中。

  @Configuration
  @ComponentScan(basePackages = {"api.controller", "api.config", "api.utils"})
  public class TestControllerConfig {
  }

然后我模拟了服务和存储库类。

【问题讨论】:

  • 如果是单元测试,则不需要@SpringBootTest,否则它是集成测试,您需要完整的上下文。

标签: java spring unit-testing spring-boot spring-boot-test


【解决方案1】:

你可以使用@EnableAutoConfigurationexclude属性disable auto configuration in spring-boot,如下:

@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class TestConfig {
}

来自@EnableAutoConfiguration 文档:

如果类不在类路径中,您可以使用注解的 excludeName 属性并指定完全限定名称。最后,您还可以通过 spring.autoconfigure.exclude 属性控制要排除的自动配置类列表。

【讨论】:

  • 按照您上面的建议,我添加了一个配置类 TestControllerConfig。然后我修改了我的测试类,如下所示。仍然会创建数据源和 JPA bean。如果我删除 @SpringBootTest 注释,我会开始为我的测试工作所需的每个 bean 收到错误 (NoSuchBeanDefinitionException)。 @RunWith(SpringRunner.class) @SpringBootTest(classes = com.tgt.merch.eno.transferorder.api.Application.class) @ContextConfiguration(classes = com.tgt.merch.test.controller.config.TestControllerConfig.class) @AutoConfigureMockMvc public class HealthControllerTest {
  • 既然你已经回答了我最初的问题并且对我来说很有意义,即使我以不同的方式解决了我的问题,我也会接受它。我是新来的,所以我希望这样做是可以的。
  • @rmulay 如果你能分享你是如何修复它的,那就太好了,对未来的读者会有帮助。
  • 我用我如何修复它来更新我的原始问题。如果不清楚,您认为我应该添加更多细节吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2015-11-01
  • 2019-11-25
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多