java – 如何在我的Web应用程序中启动和继续运行hsqldb在服务器模式?

我不想在嵌入式模式下使用它,因为我可能允许其他外部应用程序访问它.而且我想在Tomcat加载我的应用程序的同时执行服务器的启动(或者只是在tomcat运行的时候).这样我就不必要求客户端用命令或脚本来手动运行hsqldb,然后才能将我的战争置于tomcat并运行它(以保持简单).

我可以通过从Java发送命令从main调用Server,但这将给我一个无休止的线程,我不知道如何处理.有没有更容易的测试方法来做到这一点?

解决方法

根据HsqlDB文档可能从Java代码启动数据库
因此,当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);
    }
}

>在您的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>

这样做后,Web应用程序将在新的线程中启动HsqlDB.为了关闭数据库,当应用程序停止时,您可以覆盖InitServlet的destroy()方法.在方法destroy中,您必须执行命令“SHUTDOWN”作为正常的SQL查询(通过JDBC).

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...