【发布时间】:2011-06-26 15:17:02
【问题描述】:
我在嵌入式模式下使用 h2 数据库,我也使用 hibernate 来访问它。那是我用来初始化休眠的弹簧配置:
<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>
【问题讨论】:
-
您的
dataSource看起来如何?是否使用连接池,配置参数是什么? -
@benjamin-muschko 我已经为数据源添加了配置
-
您将
;DB_CLOSE_DELAY=1附加到数据库URL 中?我不太了解Spring,但如果是DriverManagerDataSource,为什么不直接使用org.h2.Driver? -
感谢DB_CLOSE_DELAY,我会试试,在这里写下结果。我认为org.h2.jdbcx.JdbcDataSource内部使用org.h2.Driver,所以差别不大。
-
我已经添加了 DB_CLOSE_DELAY=-1 并且没有更多不必要的打开和关闭
标签: java hibernate orm h2 embedded-database