2011-06-26 39 views
0

我在嵌入式模式下使用h2數據庫,我也使用休眠來訪問它。這是我的春天配置我使用初始化休眠:緩慢的嵌入式數據庫處理與休眠

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 

    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
      <prop key="hibernate.show_sql">false</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 

    <property name="annotatedClasses"> 
     <list> 
      <value>classname1</value> 
      <value>classname2</value> 
      <value>classname3</value> 
     </list> 
    </property> 
</bean> 

當我嘗試插入數據的數據庫中運行非常,非常慢,我有非常巨大的IO流(快硬盤是可以的)。我認爲每次調用

getHibernateTemplate().save(question);
時都會打開和關閉數據庫。有趣的是,如果我將連接字符串更改爲使用獨立服務器,則此問題會消失,並且所有工作都很好。

我的嵌入式數據庫配置有什麼問題?

UPD

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.h2.jdbcx.JdbcDataSource" /> 
    <property name="url" value="jdbc:h2:file:C:\temp\data.db" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 
+0

你的'dataSource'是怎麼樣的?你使用連接池和什麼是配置參數? –

+0

@ benjamin-muschko我爲數據源添加了配置文件 –

+1

您是否在數據庫URL中添加'; DB_CLOSE_DELAY = 1'?我不太瞭解Spring,但如果它是'DriverManagerDataSource',爲什麼不使用'org.h2.Driver'? –

回答

2

org.springframework.jdbc.datasource.DriverManagerDataSource打開和關閉每當你請求一個連接的實現。

根據JavaDoc:

注:這個類不是一個實際的 連接池;它實際上並不是 池連接。它只是作爲 簡單替換完整的連接池 ,實現相同的 標準接口,但在每次調用時創建新的 連接。

對於生產環境,強烈建議您使用連接池,該連接池可以預先打開有限數量的連接並將它們彙集以供使用。對於你的dataSource我會說使用Apache's Jakarta Commons DBCPC3P0This example顯示如何設置您的dataSource以使用DBCP。使用連接池肯定會減少查詢數據庫的時間,並且肯定會解決您的問題。