Come posso ottenere il valore della proprietà jdbc.batch_size in fase di runtime per un'applicazione Web utilizzando Spring MVC e Hibernate?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Secondo quello che ho trovato finora, posso usare il seguente codice:

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

ma poi ottengo un'eccezione di ibernazione:

  

org.hibernate.HibernateException: nessuna origine dati locale trovata per   configurazione: la proprietà dataSource deve essere attivata   LocalSessionFactoryBean

Qualcuno può far luce?

È stato utile?

Soluzione

Prova quanto segue (non posso provarlo poiché non uso Spring):

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

Altri suggerimenti

Sulle versioni di Hibernate che ho controllato, getConfiguration non è un metodo pubblico di SessionFactory. In alcuni casi disperati, ho inserito una Session o SessionFactory nella sua implementazione di base per ottenere alcuni valori che non erano disponibili al pubblico. In questo caso sarebbe:

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

Certo, è pericoloso perché potrebbe rompersi se cambiano l'implementazione. Di solito lo faccio solo per le ottimizzazioni di cui posso vivere senza e poi avvolgo il tutto in un blocco Lanciabile try / catch solo per assicurarmi che non danneggi nulla se fallisce. Un'idea migliore potrebbe essere quella di impostare tu stesso il valore quando inizializzi Hibernate in modo da sapere già di che si tratta dall'inizio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top