【发布时间】:2017-06-10 16:02:57
【问题描述】:
我使用 Spring Boot 开发了一个小应用程序,它使用 HSQLDB 作为数据库来存储用户,暂时。我想要做的是将数据库存储在 Maven 的资源文件夹中。我的 application.properties 文件包含以下配置:
#...
spring.datasource.url=jdbc:hsqldb:file:src/main/resources/database/dashboard
#...
所以,每当我使用 Java 启动应用程序时(右键单击我的应用程序的 main() 并作为 Spring Boot 应用程序运行),数据库都会正确存储。
但是,在使用 mvn clean install spring-boot:repackage 打包一个 WAR 文件,将其部署到 Tomcat 中并运行它之后,数据库不会存储在展开的 WAR 中。
我的问题是如何告诉spring.datasource.url=jdbc:hsqldb:file:* 属性将数据库存储在 Maven 资源目录中(在 WAR 爆炸后仍会指向该目录)?我可以使用 pom.xml 中使用的某种环境变量吗?
编辑
鉴于@Steve C 和@fredt 的答案,我意识到数据库不应该存储在战争中。相反,我会将其存储在用户的主目录spring.datasource.url=jdbc:hsqldb:file:~/tomcat_webapp_data/dashboard/database.. 非常感谢!
【问题讨论】:
-
您似乎在使用相对路径指向 hsqldb。 Hsql 的文件位置将相对于工作目录(可能是 tomcat/ 中的 bin/ )。您应该使用绝对路径。
-
1) 更好地使用 Apache Derby,HSQLDB 总是完全加载到 RAM 内存中 - 这可能会用更大的 DB 杀死你的应用程序 2) 只需更改构建脚本以将整个 db 目录包含在战争中,然后确保在服务器容器中有正确的 db 文件路径
-
@Redlab 我不想使用绝对路径,因为我不知道将放置 WAR 的系统的性质(linux,win ...),也不知道它是否'将使用 java 运行。
-
@KrzysztofCichocki 我觉得我在使用 Derby 时会遇到同样的问题......数据库会非常小。您的第二种方法似乎是正确的。但是如果我初始化数据库并将其包含在战争中,仍然需要数据源的配置(对相对路径的引用)。
标签: java maven spring-boot properties hsqldb