且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在Web应用程序中以服务器模式启动并继续运行hsqldb?

更新时间:2023-01-26 10:49:40

根据HSQLDB文档,可以从Java代码启动数据库: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html# listeners_appstart-sect .因此,当Web应用程序启动时,您可以使用servlet加载数据库.步骤应为以下步骤:

According to the HSQLDB Documentation is possible start the database from Java Code: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html#listeners_appstart-sect. So you can use a servlet for load the database when the web application is starting. The steps should be the following:

  1. 创建一个Servlet"InitDatabase",并将用于启动数据库的代码放在init()方法上

  1. Create a Servlet "InitDatabase" and put the code for start the database on the method 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().

  • In your web.xml add the property load on start up and set it to 1. This for call to method init() when the Web Application is starting.

    <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方法中,您必须像普通的sql查询一样(通过JDBC)执行命令"SHUTDOWN".

    After do this the Web Application will start HSQLDB in a new Thread. For shutdown the database when the application stops you can override the method destroy() of InitServlet. In the method destroy you must execute the command "SHUTDOWN" as normal sql query (through JDBC).