Я обновляю приложение kotlin Spring Boot 1.x для использования Spring Boot 2.1.6
Ранее я использовал EntityManagerFactoryBeanCallback
, чтобы установить hibernate.connection.provider_class
для нашей пользовательской реализации ConnectionProvider
.Это устарело и было удалено при загрузке весной 2.0 и 2.1 соответственно.
Я сейчас пытаюсь использовать HibernatePropertiesCustomizer
@Bean
fun hibernatePropertiesCustomizer() = HibernatePropertiesCustomizer {
it["hibernate.connection.provider_class"] = ScopedConnectionProvider::class.java.name
}
Приложение выдает ошибку:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Caused by:
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Caused by:
org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
Если я закомментирую строку it["hibernate.connection.provider_class"] = ScopedConnectionProvider::class.java.name
, все будет работать, за исключением, очевидно, пользовательской ConnectionProvider
Для справки я использую ScopedConnectionProvider
, чтобы включить нашу многопользовательскую работу, устанавливая переменную для каждого соединения, представляющегоID области клиента.Любое альтернативное решение, которое позволяет мне выполнять запрос SET @scope_id = ?
для каждого соединения, также подойдет.
Соответствующая информация о версии:
- Spring Boot: 2.1.6
- Весна: 5.1.8
- Спящий режим: 5.3.10
- Котлин: 1.3.21