官方说: h2控制台配置文件.h2.server.properties 在用户的主目录
.例如window安装用户主目录如下 C:Documents and Settings[username]
. 配置包含应用的各种设置和h2启动自动调用参数信息。
参数信息如下:
webAllowOthers
: 允许其它电脑连接.webPort
: h2控制台的端口。webSSL
: use encrypted (HTTPS) connections.
额外的信息如:
上次登录的连接信息格式:
<number>=<name>|<driver>|<url>|<user>
例如: 1=Generic H2 (Embedded)|org.h2.Driver|jdbc:h2:~/test|sa
一 h2服务端开启
第一种方式,通过spring的工厂方法创建
<!-- Spring中h2 TCP Server 配置 -->
<bean id="h2Server" class="org.h2.tools.Server"
factory-method="createTcpServer" init-method="start" destroy-method="stop">
<constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9092" />
</bean>
第二种方式,直接使用Server创建。
windows服务器端的数据连接配置如下
url=jdbc:h2:tcp://192.168.108.221:6678/{文件的绝对路径}
linux或者windows的操作系统的默认根目录+db文件路径
url=jdbc:h2:tcp://192.168.108.221:6678/~/{文件的相对路径}
比如linux系统默认目录为usr/vasuser/ tomcat目录为/usr/vasuser/tomcat/webapps/data/cashDb
则访问端url 为~/tomcat/webapps/data/cashDb
如果使用绝对路径,报错如下:
二 调用远程h2服务
package com.cyb.h2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.h2.tools.Server;
/**
* 作者 : iechenyb<br>
* 类描述: 说点啥<br>
* 创建时间: 2018年5月31日
*/
public class H2Demo {
private Server server;
private String port = "9080";
//linux ~/tomcat/webapps/data/cashDb
private String dbDir = "d://data/sample;CACHE_SIZE=32384;MAX_LOG_SIZE=32384;mv_store=false";// ./h2db/
private String user = "sa";
private String password = "";
public void startServer() {
try {
System.out.println("正在启动h2...");
server = Server.createTcpServer(new String[] { "-tcp", "-tcpAllowOthers", "-tcpPort", port }).start();
} catch (SQLException e) {
System.out.println("启动h2出错:" + e.toString());
e.printStackTrace();
throw new RuntimeException(e);
}
}
public void stopServer() {
if (server != null) {
System.out.println("正在关闭h2...");
server.stop();
System.out.println("关闭成功.");
}
}
public void useH2() {
try {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:tcp://192.168.16.211:" + port + "/" + dbDir, user,
password);
Statement stat = conn.createStatement();
// insert data
stat.execute("DROP TABLE IF EXISTS TEST");
stat.execute("CREATE TABLE TEST(NAME VARCHAR)");
stat.execute("INSERT INTO TEST VALUES('Hello World')");
// use data
ResultSet result = stat.executeQuery("select name from test ");
int i = 1;
while (result.next()) {
System.out.println(i++ + ":" + result.getString("name"));
}
result.close();
stat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("*********start***********");
H2Demo h2 = new H2Demo();
h2.startServer();//调用远端服务时,不需要开启server
h2.useH2();
// h2.stopServer();
System.out.println("*********end***********");
}
}
三 开放h2访问界面
<!-- 使用监听器启动和停止数据库 -->
<listener>
<listener-class>me.gacl.web.listener.H2DBServerStartListener</listener-class>
</listener>
<!-- 使用H2控制台的Servlet H2控制台是一个独立的应用程序,包括它自己的Web服务器,但它可以作为一个servlet作为-->
<servlet>
<servlet-name>H2Console</servlet-name>
<servlet-class>org.h2.server.web.WebServlet</servlet-class>
<init-param>
<param-name>webAllowOthers</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>trace</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 映射H2控制台的访问路径 -->
<servlet-mapping>
<servlet-name>H2Console</servlet-name>
<url-pattern>/console/*</url-pattern>
</servlet-mapping>
参考文档:
https://www.cnblogs.com/xdp-gacl/p/4190424.html
https://blog.csdn.net/firetaker/article/details/5909375