Переопределение Hibernate ConnectionProvider в Spring Boot 2.1 - PullRequest
0 голосов
/ 12 июля 2019

Я обновляю приложение 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

1 Ответ

0 голосов
/ 12 июля 2019

Оказывается, источник данных больше не вводился в мой ScopedConnectionProvider правильно. Я изменил его так, что я наследовал от DatasourceConnectionProviderImpl вместо того, чтобы реализовать свой собственный ConnectionProvider с нуля. Кажется, это избавило от необходимости указывать диалект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...