【发布时间】: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