2012-11-30 14 views
6

Web uygulamam için Spring 3.1.2 ve Hibernate 4.1.7 kullanıyorum. Her ikisini de şimdi yapılandırmak istiyorum. Benim hibernate.cfg.xml dosyası var:Neden Bahar Hazırda Yapılandırması'nda hem dataSource hem de sessionFactory öğesini yapılandırın?

<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> 

Benim webapp-servlet.xml bahar yapılandırma dosyası: Gerektiğinde tüm verileri zaten hazırda yapılandırmasına dahil edildiğinde ben DataSource fasulye yapılandırmak gerekiyor Neden

<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. dosya? Hazırda bekletme bazı varsayılan var mı?
  2. Başka neler kullanabilirim DataSource s kullanabilir miyim?
  3. Uygulamamda hazırda bekletme yapmak için başka herhangi bir çekirdek veya yapılandırma parametresi/özelliği eksik miyim?
+1

Tüm yapılandırma seçeneklerini çakışabilir beri hazırda yapılandırmasından işlemle ilişkili özelliklerini kaldırın.xml, LocalSessionFactoryBean'da kullanılabilir, ikincisini tercih edin ve Hazırda bekletme yapılandırmasında atlayın. –

+0

Tamam. Ama hala sadece tek bir yerde istiyorum, farklı dosyalarda veya fasulyelerde tekrarlanmam. –

+2

Demek istediğim, "hibernate.cfg.xml" kaynağından veri kaynağı yapılandırmasını kaldırın ve Spring XML'de bırakın. Daha sonra aynı 'dataSource 'çekirdeğini kullanabilirsiniz. JdbcTemplate' içinde. –

cevap

8
  1. İkisini de gerek yoktur. hibernate.cfg.xml'dan kurtulup her şeyi LocalSessionFactoryBean'da yapılandırabilir veya var olan hibernate.cfg.xml'u olduğu gibi yeniden kullanabilirsiniz (bu durumda, DataSource'u Spring yapılandırmasında yapılandırmanız gerekmez).

  2. Aşağıdaki seçenekler mevcuttur:

    • Kullanım embedded database - bu test ve öğrenme amaçları

    • Kullanım DriverManagerDataSource için iyidir - bu test için kullanılabilecek basit olmayan havuza alınmış veri kaynağı var, etc (üretim kullanımı için önerilmez)

    • DBCP veya c3p0

    • gibi bağlantı havuzunu kullanın Eğer uygulama sunucusuna dağıtmak durumunda
    • Eğer uygulama sunucusu using JNDI

  3. Geçerli yapılandırma yeterlidir tarafından sağlanan bağlantı havuzu kullanabilirsiniz, ancak bu Spring transaction management desteğini yoksundur. Bunu etkinleştirmek için size HibernateTransactionManager

  4. programlı işlem yönetimini kullanmak istiyorsanız TransactionTemplate beyan bildirim işlem yönetimi (@Transactional)

  5. etkinleştirmek için <tx:annotation-driven> ekle beyan

    • gerekir (kullanmak bildirimsel işlem yönetiminin sınırlamalarının üstesinden gelmek için)

    • Ayrıca unutmayın onlar Bahar işlem yönetimi ile `hibernate.cfg gelen

+0

Hazırda bekletme varsayılan olarak C3P0 kullanmıyor mu? İşlem yönetimi için teşekkürler, ben de onu arıyordum. Tam cevap olarak kabul edildi. –

+1

@SotiriosDelimanolis: "hibernate.cfg.xml" - evet ile yapılandırırsanız. Ancak Spring, "DataSource" yapılandırmasından Hibernate yapılandırmasını ayırır, bu nedenle farklı "DataSource" uygulamalarını kullanabilirsiniz. – axtavt

İlgili konular