Wie bekomme ich den Wert der jdbc.batch_size Eigenschaft zur Laufzeit für eine Webanwendung Spring MVC verwenden und Ruhezustand?
Frage
Nach dem, was ich bisher gefunden, kann ich den folgenden Code verwenden:
LocalSessionFactoryBean sessionFactory = (LocalSessionFactoryBean)super.getApplicationContext().getBean("&sessionFactory"); System.out.println(sessionFactory.getConfiguration().buildSettings().getJdbcBatchSize());
aber dann bekomme ich eine Hibernate Ausnahme:
org.hibernate.HibernateException: Keine lokalen Datasource gefunden Konfiguration - Datasource-Eigenschaft muss festgelegt werden auf LocalSessionFactoryBean
Kann jemand etwas Licht?
Lösung
Versuchen Sie, die folgenden (ich kann es nicht testen, da ich Frühling nicht verwenden):
System.out.println(sessionFactory.getConfiguration().getProperty("hibernate.jdbc.batch_size"))
Andere Tipps
Bei den Versionen von Hibernate, die ich überprüft habe, ist getConfiguration noch keine öffentliche Methode der Session. In einigen verzweifelten Fällen habe ich eine Session oder Session in die zugrunde liegende Implementierung werfen auf einige Werte zu erhalten, die nicht öffentlich zugänglich waren. In diesem Fall wäre das:
((SessionFactoryImplementor)sessionFactory).getSettings().getJdbcBatchSize()
Natürlich, das ist gefährlich, weil sie brechen könnten, wenn sie die Implementierung ändern. Normalerweise mache ich nur dies für Optimierungen, die ich ohne leben können, und dann wickeln Sie das Ganze in einem try / catch Throwable Block nur sicherstellen, dass es wird nichts schaden, wenn es fehlschlägt. Eine bessere Idee könnte sein, den Wert selbst einstellen, wenn Sie den Ruhezustand zu initialisieren, so dass Sie bereits wissen, was es von Anfang an ist.