Как получить значение свойства jdbc.batch_size во время выполнения для веб-приложения, использующего Spring MVC и Hibernate?

Согласно тому, что я нашел до сих пор, я могу использовать следующий код:

    LocalSessionFactoryBean sessionFactory = (LocalSessionFactoryBean)super.getApplicationContext().getBean("&sessionFactory");
    System.out.println(sessionFactory.getConfiguration().buildSettings().getJdbcBatchSize());

но затем я получаю исключение гибернации:

org.hibernate.HibernateException: No local DataSource found for configuration - dataSource property must be set on LocalSessionFactoryBean

Может кто-нибудь пролить свет?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
3 865
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте следующее (я не могу это проверить, так как не использую Spring):

System.out.println(sessionFactory.getConfiguration().getProperty("hibernate.jdbc.batch_size"))

В проверенных мной версиях Hibernate getConfiguration не является общедоступным методом SessionFactory. В нескольких безнадежных случаях я использовал Session или SessionFactory в его базовой реализации, чтобы получить некоторые значения, которые не были общедоступными. В этом случае это будет:

((SessionFactoryImplementor)sessionFactory).getSettings().getJdbcBatchSize()

Конечно, это опасно, потому что может сломаться, если они изменят реализацию. Обычно я делаю это только для оптимизации, без которой я могу жить, а затем обертываю все это в блоке try / catch Throwable, чтобы убедиться, что это ничего не повредит в случае сбоя. Лучшей идеей может быть установка значения самостоятельно при инициализации Hibernate, чтобы вы уже знали, что это такое с самого начала.

Обратите внимание, что переменная sessionFactory в вопросе не является экземпляром SessionFactory Hibernate; это LocalSessionFactoryBean, который является классом Spring.

SamS 20.09.2008 10:50

Другие вопросы по теме