我将hsqldb用于基于Spring的java webapp。我将数据库文件(mydb.lck,mydb.properties等)放在src \ main \ java \ data文件夹中,以便将它们发布到WEB-INF \ classes \ data中。
在数据源配置中,我指定了JVM工作目录的相对路径。按照hsqldb文件中的指导。
portal.jdbc.url=jdbc:hsqldb:file:/data/mydb (此分隔符是否适用于Windows?)
portal.jdbc.url=jdbc:hsqldb:file:/data/mydb
但春天似乎找不到这条路,并坚持要求
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: CUSTOMER org.hsqldb.jdbc.Util.sqlException(Unknown Source)
但是,如果我指定了绝对路径,那么它将完美地工作
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
希望这对可能遇到相同问题的人有所帮助。