gpt4 book ai didi

java - 如何在 Spring Maven WAR 中指定 SQLite 数据库文件的位置

转载 作者:行者123 更新时间:2023-11-30 08:38:29 24 4
gpt4 key购买 nike

我已经看到几个关于这个问题的问题,但我还没有找到明确的答案。

我需要将 SQLite .db 文件打包到 WAR 中,并在 WAR 或展开的 WAR 中使用该 DB 文件。

我的项目是Spring,使用的是Spring JDBC。

类路径中的 .db 文件一切正常,用于测试代码的非 Web 部分。我可以毫无问题地对数据库运行单元测试

<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="connectionInitSqls">
<list>
<value>PRAGMA foreign_keys = ON</value>
</list>
</property>
<property name="driverClassName" value="org.sqlite.JDBC" />
<property name="url" value="jdbc:sqlite:app2.db" />
</bean>

当我进行部署时,只有将数据库放在 WebContent/resources 目录中,我才能将数据库拉入 WAR 文件。我似乎无法将其与备用 URI 一起使用。 (例如,jdbc:sqlite::resource:app2.dbjdbc:sqlite:WebContent:resources:app2.dbjdbc:sqlite:/resources/app2.db 等)。我看到的答案表明我专门将它绑定(bind)到 tomcat 的部署目录位置,但我真的不想让该位置依赖于 WAR 之外的任何东西。

有没有人有数据源映射(包括 jdbc URI 字符串)和相应的 pom.xml maven-war-plugin 规范(如果适用)来实现让项目使用与项目一起存储在其 WAR 中的 SQLite .db 文件的解决方案?

提前致谢。

--编辑(回应评论的额外澄清信息)--

我可以通过此目录(或通过 maven-war-plugin 规范中的变通资源映射通过 WebApps 子目录中的某些内容)将 .db 放入 WAR 的类子目录中,但这不是主要的问题。

我的问题是:一旦 .db 在 WAR 中,我如何通过相对 URL/URI 引用它。我需要将 jdbc 驱动程序通过相对路径 指向此位置,以便无论部署位置如何都可以访问它。

我在文件系统上有绝对 URL 的选项(我已经在我的计算机上获得了直接位置来使用

或 Tomcat 中的路径,但同样,通过硬编码 URL,或最好的情况,URL 与 CATALINA_BASE 相关联

<property name="url" value="jdbc:sqlite:/var/lib/tomcat7/webapps/APPNAME/WEB-INF/classes/app2db.db" />

我看到它建议我使用

<property name="url" value="jdbc:sqlite:${catalina.base}/webapps/APPNAME/WEB-INF/classes/app2db.db" />

虽然这似乎不适用于我的安装(并且仍然不是最佳解决方案,因为它与周围的部署位置相关联)。

jdbc:sqlite 允许不使用前面的正斜杠映射相对路径,但我无法使用类似

的东西在 war 中使用它
<property name="url" value="jdbc:sqlite:WEB-INF/classes/app2db.db" />

这就是我正在寻找的——相对路径映射,这样我就可以将 .db 与 WAR 一起发送出去,然后告诉某人部署到 tomcat——或任何服务器,在合理的范围内,因为我有需要执行的 jars 主要通过 Maven 与应用程序打包在一起——(即使它们的目录结构不寻常或者它们没有映射路径变量),并且它仍然能够从分解的内部通过 rw 访问访问数据库 war 。

最佳答案

When I go to deploy, I'm able to pull the db into the WAR file only if I place it in the WebContent/resources directory.

如果我放置 my.dbMaven's default for resources <project>/src/main/resources/my.db它包装在 /my.war/WEB-INF/classes/my.db 中在这里。

关于java - 如何在 Spring Maven WAR 中指定 SQLite 数据库文件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36527211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com