【问题标题】:Spring boot 2.3.12 release not working with H2 integration testsSpring boot 2.3.12 版本不适用于 H2 集成测试
【发布时间】:2022-01-09 15:15:34
【问题描述】:

使用 Spring 2.1.3.Release,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后,上述配置停止工作。

我们看到的错误是

原因:org.h2.jdbc.JdbcSQLSyntaxErrorException:找不到表“USERPROFILE”; SQL 语句: 插入用户配置文件.....

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

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

看起来好像正在创建表。

【问题讨论】:

    标签: java spring-boot hibernate integration-testing h2


    【解决方案1】:

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

    我必须更新 POM 以使用与先前执行一起工作的 H2 jar,而不是最新的 Spring Boot 父包。

    使用 Spring 2.1.3.Release,使用 1.4.198。一切都开始运作良好。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2016-05-11
      • 2016-12-30
      • 2020-02-25
      • 1970-01-01
      • 2019-11-24
      • 2023-02-08
      • 2015-02-14
      • 2018-10-30
      相关资源
      最近更新 更多