Java 如何在web应用程序中以服务器模式启动并保持运行hsqldb?

Java 如何在web应用程序中以服务器模式启动并保持运行hsqldb?,java,hsqldb,Java,Hsqldb,我不想在嵌入式模式下使用它,因为我可能也允许其他外部应用程序访问它。我希望在Tomcat加载我的应用程序的同时(或者在Tomcat为此而运行的时候)启动服务器。这样,我就不必要求客户机使用命令或脚本手动运行hsqldb,然后才能将war放入tomcat并运行它(以保持简单) 我也许可以通过从Java发送命令从main调用,但这将给我一个无休止的线程,我不知道如何处理它。是否有一种更简单的测试方法可以做到这一点?您可以在任何web/app服务器上以嵌入式模式使用HSQLDB,并通过在web/app

我不想在嵌入式模式下使用它,因为我可能也允许其他外部应用程序访问它。我希望在Tomcat加载我的应用程序的同时(或者在Tomcat为此而运行的时候)启动服务器。这样,我就不必要求客户机使用命令或脚本手动运行hsqldb,然后才能将war放入tomcat并运行它(以保持简单)


我也许可以通过从Java发送命令从main调用,但这将给我一个无休止的线程,我不知道如何处理它。是否有一种更简单的测试方法可以做到这一点?

您可以在任何web/app服务器上以嵌入式模式使用HSQLDB,并通过在web/app服务器上运行org.HSQLDB.server.Servlet允许外部应用访问它。然后,外部应用程序将使用jdbc:hsqldb:http:type url连接到servlet


如果要将org.hsqldb.server.server(版本2.0类)或org.hsqldb.server作为Tomcat的单独进程运行,可以使用org.hsqldb.util.MainInvoker类为多个类(例如Tomcat和hsqldb server)调用main方法首先调用服务器。

根据HSQLDB文档,可以从Java代码启动数据库: . 因此,您可以在web应用程序启动时使用servlet加载数据库。步骤应如下所示:

  • 创建一个Servlet“InitDatabase”,并将启动数据库的代码放在方法init()上

  • 在web.xml中,在启动时添加属性load并将其设置为1。这用于在Web应用程序启动时调用方法init()

    <servlet>
        <servlet-name>InitDatabase</servlet-name>
        <servlet-class>bo.hsqltest.InitDatabase</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet> 
    
    
    初始化数据库
    bo.hsqltest.InitDatabase
    1.
    

  • 完成此操作后,Web应用程序将在新线程中启动HSQLDB。要在应用程序停止时关闭数据库,可以重写InitServlet的destroy()方法。在方法destroy中,您必须像正常的sql查询一样(通过JDBC)执行命令“SHUTDOWN”。

    这个问题已经过时了,但我最近遇到了类似的情况。我试图访问运行在TomEE服务器中的嵌入式HSQLDB数据库。 @弗雷德的回答给了我决定性的暗示,但我仍在努力找出所有细节。 以下是我的解决方案:

    将org.hsqldb.server.servlet的servlet映射添加到web.xml或web-fragment.xml描述符文件:

    <servlet>
        <servlet-name>hsqldb</servlet-name>
        <servlet-class>org.hsqldb.server.Servlet</servlet-class>
        <init-param>
            <param-name>hsqldb.server.database</param-name>
            <param-value>${catalina.base}/hsqldb/db</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>hsqldb</servlet-name>
        <url-pattern>/hsqldb</url-pattern>
    </servlet-mapping>
    
    
    hsqldb
    org.hsqldb.server.Servlet
    hsqldb.server.database
    ${catalina.base}/hsqldb/db
    hsqldb
    /hsqldb
    
    使用参数hsqldb.server.database,可以指定数据库的位置。因为Tomcat/Tomcat区分了CATALINA_HOME和CATALINA_BASE,仅仅指定像“hsqldb/db”这样的相对路径是不够的。 但是您可以使用Tomcat/TomEE提供的系统属性,比如${catalina.base}使您的路径成为绝对路径

    启动服务器后,可以通过URL访问HSQLDB数据库

    jdbc:hsqldb:http://localhost:8080/<context-path>/hsqldb 
    
    jdbc:hsqldb:http://localhost:8080//hsqldb 
    
    jdbc:hsqldb:http://localhost:8080/<context-path>/hsqldb