大家好,又见面了,我是你们的朋友全栈君。
H2数据库支持如下3种连接模式:
内嵌模式(通过JDBC进行本地连接,应用和数据库在同一个JVM中)
服务器模式(通过JDBC或ODBC或TCP/IP进行远程连接)
混合模式(同时支持本地和远程连接)
数据库连接URL说明:
Topic | URL Format and Examples |
---|---|
嵌入式(本地)连接 | jdbc:h2:[file:][<path>]<databaseName> jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample (Windows only) |
内存数据库(私有) | jdbc:h2:mem: |
内存数据库(被命名) | jdbc:h2:mem:<databaseName> jdbc:h2:mem:test_mem |
使用TCP/IP的服务器模式(远程连接) | jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName> jdbc:h2:tcp://localhost/~/test jdbc:h2:tcp://dbserv:8084/~/sample |
使用SSL/TLS的服务器模式(远程连接) | jdbc:h2:ssl://<server>[:<port>]/<databaseName> jdbc:h2:ssl://secureserv:8085/~/sample; |
使用加密文件 | jdbc:h2:<url>;CIPHER=[AES|XTEA] jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES jdbc:h2:file:~/secure;CIPHER=XTEA |
文件锁 | jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET} jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET |
仅打开存在的数据库 | jdbc:h2:<url>;IFEXISTS=TRUE jdbc:h2:file:~/sample;IFEXISTS=TRUE |
当虚拟机退出时并不关闭数据库 | jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE |
用户名和密码 | jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>] jdbc:h2:file:~/sample;USER=sa;PASSWORD=123 |
更新记入索引 | jdbc:h2:<url>;LOG=2 jdbc:h2:file:~/sample;LOG=2 |
调试跟踪项设置 | jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3> jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3 |
忽略位置参数设置 | jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE |
指定文件读写模式 | jdbc:h2:<url>;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws |
在Zip文件中的数据库 | jdbc:h2:zip:<zipFileName>!/<databaseName> jdbc:h2:zip:~/db.zip!/test |
兼容模式 | jdbc:h2:<url>;MODE=<databaseType> jdbc:h2:~/test;MODE=MYSQL |
自动重连接 | jdbc:h2:<url>;AUTO_RECONNECT=TRUE jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE |
自动混合模式 | jdbc:h2:<url>;AUTO_SERVER=TRUE jdbc:h2:~/test;AUTO_SERVER=TRUE |
更改其他设置 | jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>…] jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3 |
要想H2数据库能远程连接,必须设置其允许远程连接。
我们先来看一下H2数据库的默认设置:
由上图可知,默认情况下H2数据库的TCP服务端口为9092,客户端的端口为8082,PG服务的端口为5435。
集成H2到String中,配置H2数据库允许远程连接。(这种配置只适合嵌入式的配置,当配置了如下代码时,相当于已经启动了一个H2服务。)
代码语言:javascript复制<!-- 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>
修改h2.bat文件
代码语言:javascript复制@java -cp "h2-1.4.190.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console %* -tcpAllowOthers
@if errorlevel 1 pause
配置连接参数:
代码语言:javascript复制# 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
数据源配置:
代码语言:javascript复制<!-- 数据源配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass">
<value>${jdbc.driver}</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="initialPoolSize">
<value>${config.initialPoolSize}</value>
</property>
<property name="minPoolSize">
<value>${config.minPoolSize}</value>
</property>
<property name="maxPoolSize">
<value>${config.maxPoolSize}</value>
</property>
<property name="automaticTestTable">
<value>${config.automaticTestTable}</value>
</property>
<property name="checkoutTimeout">
<value>5000</value>
</property>
<property name="maxIdleTime">
<value>${config.maxIdleTime}</value>
</property>
<property name="acquireRetryAttempts">
<value>${config.acquireIncrement}</value>
</property>
<property name="acquireIncrement">
<value>${config.acquireIncrement}</value>
</property>
</bean>
启动服务端h2数据库,经测试本方式连接成功。
若想让浏览器也允许远程连接可修改H2srctoolsWEB-INF下的web.xml文件
代码语言:javascript复制<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>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182990.html原文链接:https://javaforall.cn