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?

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

  •  01-07-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top