gpt4 book ai didi

java - 未加载 Spring Boot 测试 H2 sql 脚本

转载 作者:行者123 更新时间:2023-12-05 05:59:56 25 4
gpt4 key购买 nike

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

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

脚本位于“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 fortest 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 = '{classsche.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 '').

这是我测试的配置: enter image description here

这是带有@Sql 注释的我的测试配置: enter image description here

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

最佳答案

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

另一点是,因为我的服务是 Multi-Tenancy 的,所以我必须在我的属性文件中配置,除了我的 Multi-Tenancy 的 url,还有 spring.datasource 的 url(这是因为我的 Multi-Tenancy url 是以下 jdbc:h2 : mem: testdb,但是 db h2 以这种方式设置 url jdbc: h2: mem: 718e98df-3d08-46de-99e3-6ec4dc725293,所以脚本在这个 db 中执行,而另一个 db 没有任何这些表)。

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

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

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=

关于java - 未加载 Spring Boot 测试 H2 sql 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67895671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com