Spring 启动测试 H2 sql 脚本未加载

Spring boot test H2 sql script not being loaded

所以我在尝试加载架构和数据的 .sql 脚本时遇到问题。

默认情况下我的脚本没有被加载,因为当我的测试试图从 H2 数据库中获取数据时,显示消息“Table”未找到。

脚本位于“src/test/resources”文件夹中。 pom 中的 H2 依赖项:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>

当我放置注释“@Sql(scripts = { "/schema.sql", "/data.sql" }) 时,我看到下一个错误:

java.lang.IllegalStateException: Failed to execute SQL scripts for test context [DefaultTestContext@7090eaec testClass = MicroserviceControllerTest, testInstance = sche.invm.backend.rke.asn2019.get.controller.MicroserviceControllerTest@180274b1, testMethod = testGetPerson@MicroserviceControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@5158e446 testClass = MicroserviceControllerTest, locations = '{}', classes = '{class sche.invm.backend.rke.asn2019.get.GetApplication}', contextInitializerClasses = '[]', activeProfiles = '{test}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=0}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@30bbcf91, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@52b959df, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@31834a2b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@34c53688, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6127a7e], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> false]]: could not obtain DataSource from transaction manager [org.springframework.orm.jpa.JpaTransactionManager] (named '').

这是我测试的配置:

这是我用@Sql注解测试的配置:

¿可能是什么错误? 我的应用配置了多租户,我不知道这是否会导致此特定错误。

最后的问题是,在我的服务应用程序中,属性“exclude = {DataSourceAutoConfiguration.class}”在@SpringBootApplication() 中被声明,删除它后我的测试运行没问题。

还有一点是因为我的服务是多租户的,所以我不得不在我的属性文件中配置,除了我的多租户的url,还有url的spring.datasource (这是因为我的多租户 url 是以下 jdbc: h2: mem: testdb,但是数据库 h2 是这样设置 url jdbc: h2: mem: 718e98df -3d08-46de-99e3-6ec4dc725293,所以脚本正在这个数据库中执行,而另一个数据库没有任何这些表)。

我希望它能被理解(我的英语不是最好的)

这是我的测试属性文件的一部分:

spring.datasource.url:jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username= sa
spring.datasource.password= 

#multitenant datasources
datasources.0.tenant=CL
datasources.0.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
datasources.0.username=sa
datasources.0.password=