#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. И все начало хорошо работать.