如何防止 spring boot 在启动时自动创建 bean 'entityManagerFactory' 的实例?
How to prevent spring boot from auto creating instance of bean 'entityManagerFactory' at startup?
我正在开发 Spring 启动应用程序,它使用 Spring JPA
和 PostgreSQL
。我正在使用 @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使用@EnableAutoConfiguration
的exclude
属性,如下:
@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class TestConfig {
}
来自 @EnableAutoConfiguration
文档:
如果class不在class路径中,可以使用excludeName
属性注释并改为指定完全限定名称。最后,您还可以通过 spring.autoconfigure.exclude
属性. 控制要排除的 auto-configuration classes 列表
我正在开发 Spring 启动应用程序,它使用 Spring JPA
和 PostgreSQL
。我正在使用 @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使用@EnableAutoConfiguration
的exclude
属性,如下:
@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class TestConfig {
}
来自 @EnableAutoConfiguration
文档:
如果class不在class路径中,可以使用excludeName
属性注释并改为指定完全限定名称。最后,您还可以通过 spring.autoconfigure.exclude
属性. 控制要排除的 auto-configuration classes 列表