Версия Spring boot 2.3.12 не работает с интеграционными тестами H2

#java #spring-boot #hibernate #integration-testing #h2

#Ява #пружинный ботинок #зимовать #интеграция-тестирование #h2

Вопрос:

С выпуском Spring 2.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.

Ошибка, которую мы видим, заключается в

Вызвано: Исключение org.h2.jdbc.JdbcSQLSyntaxErrorException: Таблица «ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ» не найдена; инструкция SQL: вставить в профиль пользователя…..

Когда начнется тестовый случай, ниже приведены журналы,

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

так что, похоже, создаются таблицы.

Ответ №1:

Ну, это заняло некоторое время, но проблема заключалась просто в конфигурации зависимостей.

Мне пришлось обновить POM, чтобы использовать H2 jar, который работал с предыдущим выполнением, вместо того, который поставляется с последним родительским пакетом Spring boot.

С пружиной 2.1.3.Выпуска, используется 1.4.198. И все начало хорошо работать.