gpt4 book ai didi

java - Web 应用程序中 hsqldb 文件的相对路径不起作用?

转载 作者:行者123 更新时间:2023-11-28 21:54:58 25 4
gpt4 key购买 nike

我正在为基于 Spring 的 java webapp 使用 hsqldb。我将数据库文件(mydb.lck、mydb.properties、..)放在 src\main\java\data 文件夹中,以便将它们发布到 WEB-INF\classes\data 中。

在数据源配置中,我将此相对路径指定为 JVM 工作目录。按照 hsqldb 文档中的指导。

portal.jdbc.url=jdbc:hsqldb:file:/data/mydb(这个分隔符适合 Windows 吗?)

但是Spring好像没有找到这条路,坚持要求

java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:CUSTOMER
org.hsqldb.jdbc.Util.sqlException(未知来源)

但是,如果我指定一个绝对路径,它会完美运行

portal.jdbc.url=jdbc:hsqldb:file:d:\\TomcatServer\\apache-tomcat-7.0.10\\wtpwebapps\\myportal-app\\data\\mydb

我应该不了解 Web 应用程序上的 JVM 工作目录吗?感谢您的帮助。

最佳答案

Tomcat 似乎没有为我们提供属性变量(如“webroot”)来引用我的应用程序上下文。所以我的解决方案是在 Servlet 上下文监听器中注册这样的属性。

我的代码:

 public class WebAppPropertiesListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
String rootPath = sce.getServletContext().getRealPath("/");
System.setProperty("webroot", rootPath);

}
...
}

并在Spring上下文触发前在web.xml中添加监听

<listener>
<listener-class>com.iportal.util.WebAppPropertiesListener</listener-class>
</listener>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

然后我将属性放入 Hsqldb 设置中。

portal.jdbc.url=jdbc:hsqldb:file:${webroot}WEB-INF/classes/data/mydb

希望这对可能遇到同样问题的人有所帮助。

关于java - Web 应用程序中 hsqldb 文件的相对路径不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11289245/

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