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

StackOverflow https://stackoverflow.com/questions/105998

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

org.спящий режим.Исключение HibernateException:Локальный источник данных не найден для конфигурация - свойство DataSource должно быть установлено на LocalSessionFactoryBean

Кто-нибудь может пролить немного света?

Это было полезно?

Решение

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top