Comment obtenir la valeur de la propriété jdbc.batch_size au moment de l'exécution pour une application Web utilisant Spring MVC et Hibernate?

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

  •  01-07-2019
  •  | 
  •  

Question

D'après ce que j'ai trouvé jusqu'à présent, je peux utiliser le code suivant:

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

mais ensuite j'obtiens une exception Hibernate:

  

org.hibernate.HibernateException: aucune source de données locale trouvée pour   configuration - la propriété dataSource doit être définie sur   LocalSessionFactoryBean

Quelqu'un peut-il nous éclairer?

Était-ce utile?

La solution

Essayez ce qui suit (je ne peux pas le tester car je n'utilise pas Spring):

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

Autres conseils

Sur les versions d'Hibernate que j'ai vérifiées, getConfiguration n'est pas une méthode publique de SessionFactory. Dans quelques cas désespérés, j'ai jeté une session ou une SessionFactory dans son implémentation sous-jacente pour obtenir des valeurs qui n'étaient pas publiquement disponibles. Dans ce cas, ce serait:

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

Bien sûr, c’est dangereux car cela pourrait casser s’ils modifiaient la mise en œuvre. En général, je ne fais cela que pour les optimisations sans lesquelles je ne peux pas vivre, puis je place le tout dans un bloc try / catch Throwable, juste pour m'assurer que rien ne fera mal en cas d'échec. Une meilleure idée pourrait être de définir vous-même la valeur lors de l’initialisation de Hibernate afin de savoir ce qu’elle est depuis le début.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top