【发布时间】:2017-06-23 05:29:05
【问题描述】:
我想配置一个 Spring Boot 应用程序,以便根本不使用任何数据库。 所以我注释了我的应用程序类以排除 JPA 自动配置类:
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class Application {
public static void main(final String... args) {
run(Application.class, args);
}
}
当服务独立运行时,这可以正常工作
不幸的是,我的测试类似乎忽略了注释,尽管我使用 Application 类进行测试
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SwaggerJsonExistenceTest {
...
}
测试失败并显示以下错误消息
引起:org.springframework.beans.factory.BeanCreationException: 创建名为“dataSource”的 bean 时出错:调用 init 方法 失败的;嵌套异常是 java.lang.IllegalStateException: 不能 确定用于测试的嵌入式数据库。如果你想要一个嵌入式 数据库请在类路径中放置一个受支持的数据库。
更新: 类路径上没有 DB 驱动程序。
org.springframework.boot:spring-boot-starter-data-jpa 用于测试(通过 gradle 中的 testCompile 指令包含)
如何配置测试以使其不使用与 db 相关的自动配置?
修复:我已删除所有 jpa 启动器依赖项(因为不需要 DB),因此根本没有完成数据源自动配置。
【问题讨论】:
-
类路径上有数据库驱动吗?您使用哪种弹簧靴启动器?如果你这样做,请将其删除。它将停止任何 db-autoconfiguration 魔术。
-
@BartoszBilicki 我已删除所有 jpa 入门依赖项。现在可以了,谢谢。虽然我还是不知道,为什么排除类对测试不起作用...
标签: java spring hibernate spring-boot spring-data-jpa