如何防止 spring boot 在启动时自动创建 bean 'entityManagerFactory' 的实例?

How to prevent spring boot from auto creating instance of bean 'entityManagerFactory' at startup?

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

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

我花了很多时间尝试只加载单元测试所需的 bean,但 运行 出现了很多错误。我是 Spring 的新手,我希望其他人已经 运行 了解过这个……并且可以提供帮助。如果需要,我可以 post 代码片段。

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

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

我模拟了服务和存储库 classes.

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

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

来自 @EnableAutoConfiguration 文档:

如果class不在class路径中,可以使用excludeName属性注释并改为指定完全限定名称。最后,您还可以通过 spring.autoconfigure.exclude 属性. 控制要排除的 auto-configuration classes 列表