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