来自脚本的基于 HSQL 文件的数据库
HSQL file based database from script
我有一个问题。我在玩 JSF/ Spring/ Hibernate 和 HSQL。
我有一个用于此目的的小型测试应用程序,对于我想实现的一个功能,我需要有可能保留一些数据。我不想有一个完整的数据库,所以我选择了 HSQL。从本教程 (http://devcrumb.com/hibernate/hibernate-jpa-spring-and-hsqldb) 开始,我构建了我的应用程序。我在数据类型方面遇到了一些问题,我选择从脚本构建我的数据库。
就像在教程中一样,我在 application.xml 中定义了我的数据源,只是我将 url 属性 更改为使用文件。
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:hsql://localhost/testdb</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="jpaData" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
现在,我已将数据源更改为如下内容:
<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location="classpath:embeddedDbStructure.sql" />
</jdbc:embedded-database>
到目前为止一切正常。
我的问题是,当服务器关闭时,这个数据库被删除了。是否有可能同时使用两者?一个脚本作为我的数据库结构的基础,但数据库本身被写入我的文件系统上的一个文件,以便它在服务器重启后可用?我知道可能有一些解决方案可以通过一些代码来实现这一点,但是是否有可能以这种方式配置它?
提前致谢
实际上对于您的情况,您使用的是 hsqldb 内存模式,spring 确实是一个内存数据库。要重用文件数据库,您需要更新 hsqldb 模式以使用 "In-Process Mode" like "jdbc:hsqldb:file:testdb"
其中一道例题是Embedded HSQLDB persist data to a file,大家可以参考一下
我有一个问题。我在玩 JSF/ Spring/ Hibernate 和 HSQL。 我有一个用于此目的的小型测试应用程序,对于我想实现的一个功能,我需要有可能保留一些数据。我不想有一个完整的数据库,所以我选择了 HSQL。从本教程 (http://devcrumb.com/hibernate/hibernate-jpa-spring-and-hsqldb) 开始,我构建了我的应用程序。我在数据类型方面遇到了一些问题,我选择从脚本构建我的数据库。
就像在教程中一样,我在 application.xml 中定义了我的数据源,只是我将 url 属性 更改为使用文件。
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:hsql://localhost/testdb</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="jpaData" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
现在,我已将数据源更改为如下内容:
<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location="classpath:embeddedDbStructure.sql" />
</jdbc:embedded-database>
到目前为止一切正常。 我的问题是,当服务器关闭时,这个数据库被删除了。是否有可能同时使用两者?一个脚本作为我的数据库结构的基础,但数据库本身被写入我的文件系统上的一个文件,以便它在服务器重启后可用?我知道可能有一些解决方案可以通过一些代码来实现这一点,但是是否有可能以这种方式配置它?
提前致谢
实际上对于您的情况,您使用的是 hsqldb 内存模式,spring 确实是一个内存数据库。要重用文件数据库,您需要更新 hsqldb 模式以使用 "In-Process Mode" like "jdbc:hsqldb:file:testdb"
其中一道例题是Embedded HSQLDB persist data to a file,大家可以参考一下