2012-11-30 10 views
6

Ich verwende Spring 3.1.2 und Hibernate 4.1.7 für meine Webanwendung. Ich möchte jetzt beide konfigurieren. Ich habe meine hibernate.cfg.xml Datei:Warum konfigurieren Sie sowohl dataSource als auch sessionFactory in der Spring-Hibernate-Konfiguration?

<hibernate-configuration> 
    <session-factory> 
     <property name="connection.url">jdbc:mysql://localhost:3306/test</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password">root</property> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.pool_size">10</property> 
     <property name="hibernate.connection.autocommit">false</property> 
     <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
     <!-- 
     <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
     --> 
     <property name="hibernate.show_sql">true</property> 
     <property name="hibernate.hbm2ddl.auto">update</property>  
    </session-factory> 
</hibernate-configuration> 

Meine webapp-servlet.xml Frühjahr Konfigurationsdatei:

<beans> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="configLocation"> 
     <value> 
      classpath:hibernate.cfg.xml 
     </value> 
    </property> 
    <property name = "dataSource" ref = "dataSource"></property> 
</bean> 

<bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource"> 
    <property name = "driverClassName" value = "com.mysql.jdbc.Driver" /> 
    <property name = "url" value = "jdbc:mysql://localhost:3306/test" /> 
    <property name = "username" value = "root" /> 
    <property name = "password" value = "root" /> 
    <property name = "maxActive" value = "10" /> 
</bean> 
</beans> 
  1. Warum ich eine Datasource-Bean tun müssen, bei Bedarf alle Daten konfigurieren, bereits in der Hibernate-Konfiguration enthalten ist Datei? Verfügt Hibernate über einen Standard, den es verwenden kann?
  2. Was sind andere DataSource s kann ich verwenden?
  3. Fehle ich irgendwelche anderen Beans oder Konfigurationsparameter/Eigenschaften, um Hibernate mit meiner Anwendung arbeiten zu lassen?
+1

Alle Konfigurationsoptionen von Ihrem 'hibernate.cfg in Konflikt stehen könnten.xml' sind in 'LocalSessionFactoryBean' verfügbar, bevorzugen letztere und überspringen sie in der Hibernate-Konfiguration. –

+0

Ok. Aber ich will sie nur an einem einzigen Ort, nicht in verschiedenen Dateien oder Bohnen. –

+2

Das ist, was ich sage, entfernen Sie Datenquelle Konfiguration von 'hibernate.cfg.xml' und lassen Sie es in Spring XML. Sie können später dieselbe 'dataSource'-Bean verwenden, z. in 'JdbcTemplate'. –

Antwort

8
  1. Sie nicht beide brauchen. Sie können entweder hibernate.cfg.xml loswerden und alles in LocalSessionFactoryBean konfigurieren, oder Ihre vorhandene hibernate.cfg.xml wie sie ist wiederverwenden (in diesem Fall müssen Sie nicht konfigurieren DataSource in Spring Config).

  2. Sie haben folgende Möglichkeiten:

    • Verwendung embedded database - es für die Prüfung und Lernzwecke

    • Verwendung DriverManagerDataSource gut ist - es ist eine einfache nicht-gepoolten Datenquelle, die für die Prüfung verwendet werden kann, etc

    • (nicht für den produktiven Einsatz empfohlen)
    • Verwenden Verbindungspool wie DBCP oder c3p0

    • Wenn Sie auf Anwendungsserver bereitstellen können Sie Verbindungspool durch den Anwendungsserver bereitgestellt verwenden using JNDI

  3. Ihre aktuelle Konfiguration ist ausreichend, aber es fehlt Unterstützung von Spring transaction management. Um es zu ermöglichen, müssen Sie

    • Deklarieren HibernateTransactionManager

    • <tx:annotation-driven> In den deklarative Transaktionsmanagement (@Transactional)

    • TransactionTemplate Deklarieren zu aktivieren, wenn Sie programmatische Transaktionsmanagement verwenden möchten (verwenden Sie es Einschränkungen des deklarativen Transaktionsmanagement zu überwinden)

    • Auch nicht vergessen transaktionsbezogenen Eigenschaften von Hibernate-Konfiguration zu entfernen, da sie mit Frühlings-Transaktionsmanagement

+0

Verwendet Hibernate C3P0 nicht standardmäßig? Danke für das Transaktionsmanagement, das habe ich auch gesucht. Akzeptiert als vollständige Antwort. –

+1

@SotiriosDelimanolis: Wenn Sie es mit 'Hibernate.cfg.xml 'konfigurieren - ja. Aber Spring entkoppelt die Hibernate-Konfiguration von der 'DataSource'-Konfiguration, daher können Sie verschiedene 'DataSource'-Implementierungen verwenden. – axtavt

Verwandte Themen