bng*_*n82 2 java spring tomcat hsqldb
我正在使用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吗?)
但是,Spring似乎没有找到这条道路而且坚持要求
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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
并在触发Spring上下文之前在web.xml中添加侦听器
<listener>
<listener-class>com.iportal.util.WebAppPropertiesListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
然后我把属性放在Hsqldb设置中.
portal.jdbc.url=jdbc:hsqldb:file:${webroot}WEB-INF/classes/data/mydb
Run Code Online (Sandbox Code Playgroud)
希望这对可能遇到同样问题的人有所帮助.
| 归档时间: |
|
| 查看次数: |
6051 次 |
| 最近记录: |