Как мне получить значение свойства jdbc.batch_size во время выполнения для веб-приложения, использующего Spring MVC и Hibernate?
Вопрос
Согласно тому, что я нашел до сих пор, я могу использовать следующий код:
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, просто чтобы убедиться, что это ничего не повредит в случае сбоя.Лучшей идеей могло бы быть установить это значение самостоятельно при инициализации режима гибернации, чтобы вы уже знали, что это такое с самого начала.