我有一个必须相当常见的设置:我有一个 H2 db,带有一个 db 文件。我在独立模式下使用数据库。Hibernate 提供对 db 的访问,我已将代码部署到 Tomcat 中。
问题是:我找不到简单地将 db 文件放入war
并在休眠配置文件中提供相对路径的好方法。
目前,我必须c://whatever_db_file_container_dir/dbname
在休眠配置中使用路径。
这使我无法部署零配置 Web 应用程序。有没有办法把这个设置变成一个自包含的零配置包?
我有一个必须相当常见的设置:我有一个 H2 db,带有一个 db 文件。我在独立模式下使用数据库。Hibernate 提供对 db 的访问,我已将代码部署到 Tomcat 中。
问题是:我找不到简单地将 db 文件放入war
并在休眠配置文件中提供相对路径的好方法。
目前,我必须c://whatever_db_file_container_dir/dbname
在休眠配置中使用路径。
这使我无法部署零配置 Web 应用程序。有没有办法把这个设置变成一个自包含的零配置包?
目前,H2 不支持类路径中的数据库(有一个功能请求,但尚未实现)。但这仅适用于只读数据库。不幸的是,H2 还不支持数据库 URL 中的系统属性。
但是,Hibernate 支持Programmatic 配置。我不确定如何在 Tomcat 中获取 Web 应用程序的目录,但我知道catalina.home 和 catalina.base。因此,在启动应用程序时,获取catalina.home
系统属性的值,并相应地使用数据库 URL 设置 Hibernate 系统属性。我没有尝试过自己,但这就是它应该如何工作的。
如果您不想等待实现的功能,您可以在代码中动态设置 H2(或 HSQL、derby)url。检查http://www.jvmhost.com/spring-hosting以获取代码示例。