我想配置Spring Boot应用程序,以便根本不使用DB。 所以我已经注释了我的Application类来排除JPA autoconfig类:
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class Application {
public static void main(final String... args) {
run(Application.class, args);
}
}
当服务独立运行时,这可以正常工作
不幸的是我的test classe似乎忽略了注释,尽管我使用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),因此根本没有完成数据源autoconfig。
答案 0 :(得分:0)
@SpringBootApplication
注释有一个exclude属性,在这种情况下,您应该使用它来支持@EnableAutoConfiguration(exclude = ...)
。如果您使用它,@SpringBootTest
带注释的测试应该正确地强制执行排除。
答案 1 :(得分:0)
我在版本2.0.9.RELEASE中遇到此问题,必须使用它来遵守我的公司标准。对我有用的是:
@SpringBootTest(properties="spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration")
我无法确定这是否是我的Springboot版本中@EnableAutoConfiguration的问题,但是对于2.1.5.RELEASE版本,我不必通过@SpringBootTest设置该属性即可使此工作正常。