H2数据库支持如下3种连接模式:
内嵌模式(通过JDBC进行本地连接,应用和数据库在同一个JVM中)
服务器模式(通过JDBC或ODBC或TCP/IP进行远程连接)
混合模式(同时支持本地和远程连接)
数据库连接URL说明:
Topic
URL Format and Examples
嵌入式(本地)连接
jdbc:h2:[file:][] jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample (Windows only)
内存数据库(私有)
jdbc:h2:mem:
内存数据库(被命名)
jdbc:h2:mem: jdbc:h2:mem:test_mem
使用TCP/IP的服务器模式(远程连接)
jdbc:h2:tcp://[:]/[] jdbc:h2:tcp://localhost/~/test jdbc:h2:tcp://dbserv:8084/~/sample
使用SSL/TLS的服务器模式(远程连接)
jdbc:h2:ssl://[:]/ jdbc:h2:ssl://secureserv:8085/~/sample;
使用加密文件
jdbc:h2:;CIPHER=[AES|XTEA] jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES jdbc:h2:file:~/secure;CIPHER=XTEA
文件锁
jdbc:h2:;FILE_LOCK={NO|FILE|SOCKET} jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET
仅打开存在的数据库
jdbc:h2:;IFEXISTS=TRUE jdbc:h2:file:~/sample;IFEXISTS=TRUE
当虚拟机退出时并不关闭数据库
jdbc:h2:;DB_CLOSE_ON_EXIT=FALSE
用户名和密码
jdbc:h2:[;USER=][;PASSWORD=] jdbc:h2:file:~/sample;USER=sa;PASSWORD=123
更新记入索引
jdbc:h2:;LOG=2 jdbc:h2:file:~/sample;LOG=2
调试跟踪项设置
jdbc:h2:;TRACE_LEVEL_FILE= jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3
忽略位置参数设置
jdbc:h2:;IGNORE_UNKNOWN_SETTINGS=TRUE
指定文件读写模式
jdbc:h2:;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws
在Zip文件中的数据库
jdbc:h2:zip:!/ jdbc:h2:zip:~/db.zip!/test
兼容模式
jdbc:h2:;MODE= jdbc:h2:~/test;MODE=MYSQL
自动重连接
jdbc:h2:;AUTO_RECONNECT=TRUE jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE
自动混合模式
jdbc:h2:;AUTO_SERVER=TRUE jdbc:h2:~/test;AUTO_SERVER=TRUE
更改其他设置
jdbc:h2:;=[;=...] jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3
要想H2数据库能远程连接,必须设置其允许远程连接。
我们先来看一下H2数据库的默认设置:
由上图可知,默认情况下H2数据库的TCP服务端口为9092,客户端的端口为8082,PG服务的端口为5435。
集成H2到String中,配置H2数据库允许远程连接。(这种配置只适合嵌入式的配置,当配置了如下代码时,相当于已经启动了一个H2服务。)
factory-method="createTcpServer" init-method="start" destroy-method="stop">
修改h2.bat文件
@java -cp "h2-1.4.190.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console %* -tcpAllowOthers
@if errorlevel 1 pause
配置连接参数:
# h2
#=============================
jdbc.driver=org.h2.Driver
jdbc.url=jdbc:h2:tcp://192.168.1.121:9092/~/test
#jdbc.url=jdbc:h2:~/test
jdbc.username=sa
jdbc.password=
hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.use_sql_comments=false
config.initialPoolSize=10
config.minPoolSize=20
config.maxPoolSize=350
config.maxIdleTime=70
config.acquireIncrement=5
config.idleConnectionTestPeriod=60
config.acquireRetryAttempts=5
数据源配置:
${jdbc.driver}
${jdbc.url}
${jdbc.username}
${jdbc.password}
${config.initialPoolSize}
${config.minPoolSize}
${config.maxPoolSize}
${config.automaticTestTable}
5000
${config.maxIdleTime}
${config.acquireIncrement}
${config.acquireIncrement}
启动服务端h2数据库,经测试本方式连接成功。
若想让浏览器也允许远程连接可修改H2\src\tools\WEB-INF下的web.xml文件
H2Console
org.h2.server.web.WebServlet
webAllowOthers
trace
1