我不想在嵌入模式下使用它,因为我也可以允许其他外部应用程序访问它.我想在Tomcat加载我的应用程序的同时执行服务器的启动(或者只是当tomcat运行时).这样我就不必要求客户端使用命令或脚本手动运行hsqldb,然后才能将我的战争放入tomcat并运行它(为了简单起见).
我可以通过从Java发送命令从main 调用Server,但这会给我一个无休止的线程,我不知道如何处理它.有没有更容易测试的方法来做到这一点?
根据HSQLDB文档,可以从Java代码启动数据库:http: //hsqldb.org/doc/2.0/guide/listeners-chapt.html#listeners_appstart-sect.因此,您可以在Web应用程序启动时使用servlet加载数据库.步骤应如下:
创建一个Servlet"InitDatabase"并在方法init()上放置启动数据库的代码
@Override
public void init() throws ServletException {
super.init();
try {
System.out.println("Starting Database");
HsqlProperties p = new HsqlProperties();
p.setProperty("server.database.0", "file:/opt/db/crm");
p.setProperty("server.dbname.0", "mydb");
p.setProperty("server.port", "9001");
Server server = new Server();
server.setProperties(p);
server.setLogWriter(null); // can use custom writer
server.setErrWriter(null); // can use custom writer
server.start();
} catch (AclFormatException afex) {
throw new ServletException(afex);
} catch (IOException ioex) {
throw new ServletException(ioex);
}
}
Run Code Online (Sandbox Code Playgroud)在web.xml中,在启动时添加属性加载并将其设置为1.这用于在Web应用程序启动时调用方法init().
<servlet>
<servlet-name>InitDatabase</servlet-name>
<servlet-class>bo.hsqltest.InitDatabase</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)执行此操作后,Web应用程序将在新线程中启动HSQLDB.对于在应用程序停止时关闭数据库,您可以覆盖InitServlet的方法destroy().在方法destroy中,你必须执行命令"SHUTDOWN"作为正常的sql查询(通过JDBC).
| 归档时间: |
|
| 查看次数: |
16103 次 |
| 最近记录: |