当前位置: 首页 > 知识库问答 >
问题:

Spring boot 2.3.12版本不适用于H2集成测试

桂梓
2023-03-14

带Spring2.1.3。版本,H2集成测试运行良好。

以下是配置

应用程序属性:

spring.application.name=someApp
spring.h2.console.enabled=true
spring.jackson.default-property-inclusion=NON_NULL
server.max-http-header-size=16000

配置类:

@Configuration
@Profile("test")
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "writeEntityManagerFactory", transactionManagerRef = "writeTransactionManager", basePackages = {
        "somepackage.repositories.write" })
public class H2DatabaseWriteConfiguration {

    @Autowired
    private DatabaseConfiguration vDatabaseConfiguration;

    @Bean(name = "writeDataSource")
    public DataSource writeDataSource() throws CommonConfigDecryptException {
        String dbUrl = "jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1";

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setUrl(dbUrl);
        Properties props = new Properties();
        props.setProperty("spring.datasource.data", "data.sql");
        props.setProperty("spring.datasource.initialization-mode", "ALWAYS");
        dataSource.setConnectionProperties(props);

        return dataSource;
    }

    @Bean(name = "writeEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
                                                                       @Qualifier("writeDataSource") DataSource dataSource) {
        return builder.dataSource(dataSource).packages("somepackage.models.jpa").persistenceUnit("write")
                .build();
    }

    @Bean(name = "writeTransactionManager")
    public PlatformTransactionManager writeTransactionManager(
            @Qualifier("writeEntityManagerFactory") EntityManagerFactory writeEntityManagerFactory) {
        return new JpaTransactionManager(writeEntityManagerFactory);
    }
}

引导:

spring:
  application:
    name: someApp
  main:
    allow-bean-definition-overriding: true
  jackson:
    serialization:
      fail-on-empty-beans: false
  jpa:
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    generate-ddl: false
    hibernate:
      ddl-auto: none
    show-sql: true
    properties:
      hibernate:
        enable_lazy_load_no_trans: true

将Spring boot版本升级到2.3.12.release.后,上述配置停止工作

我们看到的错误是

原因:组织。h2.jdbc。JdbcSQLSyntaxErrorException:未找到表“USERPROFILE”;SQL语句:插入userProfile。。。。。

当测试用例开始时,下面是日志,

Hibernate: create table hibernate_sequence (next_val bigint) engine=InnoDB
Hibernate: insert into hibernate_sequence values ( 1 )
Hibernate: create table userProfile ..... 

看起来正在创建表。

共有1个答案

海岳
2023-03-14

好吧,这需要一些时间,但问题只是依赖配置。

我不得不更新POM,使其使用之前执行的H2 jar,而不是最新的Spring boot父包。

使用Spring 2.1.3。发布,使用1.4.198。一切开始运行良好。

 类似资料:
  • 我是scala新手,junit测试用例不在集成测试中运行。 我在build.sbt中添加了 请帮助我运行集成测试

  • 我的谷歌登录非常适合调试变体。但是当我尝试构建发布变体时,它停止工作......我提到了这个答案,但就我而言,我还没有上传到我的应用程序到Play商店。那么在这种情况下,我如何获得新的 sha1 密钥呢?

  • 问题内容: 如何配置Maven编译器以将Java 5用于测试代码并将Java 1.4用于主代码? 问题答案: 如果要设置对相关Java版本的遵从性,则可以为每次执行配置编译器插件。假设Maven使用的JDK至少与您指定的最高版本相同。通过使用属性,可以在命令行或子项中覆盖该配置(如果需要): 如果您打算使用其他 编译器 ,则涉及的更多。因为您需要指定JDK的路径以及所使用的编译器版本。同样,这些可

  • 我有两个版本的oracle,oracle Database 11g Enterprise Edition 11.2.0.1.0版本-生产版和oracle Database 11.g Enterprise Edition版本11.2-0.3.0版本-64位生产版 我有这个sql: 它适用于11.2.0.1.0,但在11.2.0.3.0上,我收到此错误: 我能做些什么来解决这个问题? 感谢。

  • 问题内容: 我在运行Android 4.3的仿真器上使用Retrofit时遇到问题,并且设备在Android 4.4.2上运行,而相同的代码在运行Android 7.1.1的另一个仿真器上正常运行 每次尝试执行请求时,都会收到超时异常。 代码如下 和对api的调用 问题答案: 它显示为,起初建议提高客户端的连接超时值,正如在此答案中所解释的- 但在查看…的当前源代码时,这提示不兼容的协议。 服务器

  • 问题内容: 我正在使用dotnet测试对dotnet核心库进行单元测试。我像这样在我的詹金斯奴隶上进行测试。 测试报告如下所示。 我在詹金斯(Jenkins)工作DSL中使用一个块来尝试阅读报告。 詹金斯似乎看到了这份报告。 记录测试结果 但这不是解析结果并将其合并到报告中。我在Jenkins构建仪表板上看不到测试报告。 有任何想法吗? 问题答案: 您可以使用以下管道代码来运行和发布dotnet核