Como faço para obter o valor da propriedade jdbc.batch_size em tempo de execução para um aplicativo Web usando Spring MVC e Hibernate?
Pergunta
De acordo com o que eu encontrei até agora, eu posso usar o seguinte código:
LocalSessionFactoryBean sessionFactory = (LocalSessionFactoryBean)super.getApplicationContext().getBean("&sessionFactory"); System.out.println(sessionFactory.getConfiguration().buildSettings().getJdbcBatchSize());
mas então eu recebo uma exceção Hibernate:
org.hibernate.HibernateException: Não DataSource local encontrou para configuração - propriedade DataSource deve ser definida em LocalSessionFactoryBean
Alguém pode lançar alguma luz?
Solução
Tente o seguinte (eu não posso testá-lo desde que eu não use Primavera):
System.out.println(sessionFactory.getConfiguration().getProperty("hibernate.jdbc.batch_size"))
Outras dicas
Nas versões do Hibernate que eu já verificados, getConfiguration não é um método público de SessionFactory. Em alguns casos desesperados, eu lançar uma sessão ou SessionFactory em sua implementação subjacente para chegar a alguns valores que não estavam disponíveis publicamente. Neste caso, que seria:
((SessionFactoryImplementor)sessionFactory).getSettings().getJdbcBatchSize()
É claro que isso é perigoso porque poderia quebrar se eles mudam a implementação. Eu normalmente só fazer isso por otimizações que eu posso viver sem e em seguida, enrole a coisa toda em um bloco Throwable try / catch só para ter certeza que não vai doer nada se ele falhar. Uma idéia melhor poderia ser a de definir o valor a si mesmo quando você inicializa o Hibernate então você já sabe o que é desde o princípio.