H2是一個開源的嵌入式數據庫引擎,采用java語言編寫,不受平台的限制,同時H2提供了一個十分方便的web控制台用於操作和管理數據庫內容。H2還提供兼容模式,可以兼容一些主流的數據庫,因此采用H2作為開發期的數據庫非常方便。
一、引入Maven依賴
在maven中定義H2數據庫的版本屬性
<properties> <h2.version>1.3.172</h2.version> </properties> |
添加H2依賴
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>${h2.version}</version> <scope>test</scope> </dependency> |
二、運行方式
1、在內存中運行
數據庫只在內存中運行,關閉連接后數據庫將被清空,適合測試環境
連接字符串:
jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1 |
如果不指定DBName,則以私有方式啟動,只允許一個連接
2、嵌入式
數據庫持久化存儲為單個文件
連接字符串:
jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE |
~/.h2/DBName表示數據庫文件的存儲位置,如果第一次連接則會自動創建數據庫
3、服務模式
H2支持三種服務模式:
1.web server:此種運行方式支持使用瀏覽器訪問H2 Console
2.TCP server:支持客戶端/服務器端的連接方式
3.PG server:支持PostgreSQL客戶端
啟動tcp服務連接字符串示例:
jdbc:h2:tcp://localhost/~/test 使用用戶主目錄
jdbc:h2:tcp://localhost//data/test 使用絕對路徑
4、連接字符串參數
1.DB_CLOSE_DELAY:要求最后一個正在連接的連接斷開后,不要關閉數據庫
2.MODE=MySQL:兼容模式,H2兼容多種數據庫,該值可以為:DB2、Derby、HSQLDB、MSSQLServer、MySQL、Oracle、PostgreSQL
3.AUTO_RECONNECT=TRUE:連接丟失后自動重新連接
4.AUTO_SERVER=TRUE:啟動自動混合模式,允許開啟多個連接,該參數不支持在內存中運行模式
5.TRACE_LEVEL_SYSTEM_OUT、TRACE_LEVEL_FILE:輸出跟蹤日志到控制台或文件, 取值0為OFF,1為ERROR(默認值),2為INFO,3為DEBUG
6.SET TRACE_MAX_FILE_SIZE mb:設置跟蹤日志文件的大小,默認為16M
5、啟動服務模式,打開H2 Console web頁面
啟動服務,在命令行中執行
java -cp h2*.jar org.h2.tools.Server |
執行如下命令,獲取選項列表及默認值
java -cp h2*.jar org.h2.tools.Server -? |
常見的選項如下:
-web:啟動支持H2 Console的服務
-webPort <port>:服務啟動端口,默認為8082
-browser:啟動H2 Console web管理頁面
-tcp:使用TCP server模式啟動
-pg:使用PG server模式啟動
此外,使用maven也可以啟動H2服務
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>1.0.0</modelVersion> <version>1.0.0</version> <groupId>groupid</groupId> <artifactId>h2-console</artifactId> <name>H2 Console</name> <packaging>pom</packaging> <properties> <h2.version>1.3.172</h2.version> </properties> <dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>${h2.version}</version> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>org.h2.tools.Server</mainClass> <arguments> <argument>-web</argument> <argument>-webPort</argument> <argument>8090</argument> <argument>-browser</argument> </arguments> </configuration> </plugin> </plugins> </build> </project> |
在命令行中執行如下命令啟動H2 Console
或者建立一個bat文件
@echo off call mvn exec:java pause |
此操作相當於執行了如下命令:
java -jar h2-1.3.168.jar -web -webPort 8090 -browser |
三、應用程序配置
1、Properties配置
java應用程序關於數據庫的Properties配置文件示例如下:
#h2 database settings jdbc.driver=org.h2.Driver jdbc.url=jdbc:h2:file:~/.h2/quickstart;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1 jdbc.username=sa jdbc.password= #connection pool settings jdbc.pool.maxIdle=5 jdbc.pool.maxActive=40 |
2、初始化數據庫
(1)、在Maven中初始化數據庫
可以創建一個Profile,專門用於初始化數據庫。在maven中可以通過maven-antrun-plugin執行ant任務,在ant任務中使用sql標簽可以執行sql腳本文件,配置示例如下:
<profile> <id>refresh-db</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <configuration> <target> <property file="src/main/resources/application.properties" /> <sql driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.username}"
password="${jdbc.password}" onerror="continue" encoding="${project.build.sourceEncoding}"> <classpath refid="maven.test.classpath" /> <transaction src="src/main/resources/sql/h2/schema.sql"/> <transaction src="src/test/resources/data/h2/import-data.sql"/> </sql> </target> </configuration> </plugin> </plugins> </build> </profile> |
執行如下命令調用該Profile,初始化數據庫
mvn antrun:run -Prefresh-db |
(2)、在Spring中初始化數據庫
Spring Profile和maven profile一樣,也可以模擬不同的開發環境。在Spirng中可以通過jdbc:initialize-database初始化數據庫,配置示例如下
<beans profile="test"> <context:property-placeholder ignore-resource-not-found="true" location="classpath*:/application.properties, classpath*:/application.test.properties" /> <!-- Spring Simple連接池 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 初始化數據表結構 --> <jdbc:initialize-database data-source="dataSource" ignore-failures="ALL"> <jdbc:script location="classpath:sql/h2/schema.sql" /> <jdbc:script location="classpath:data/h2/import-data.sql" encoding="UTF-8"/> </jdbc:initialize-database> </beans> |
參靠:
1、Java嵌入式數據庫H2學習總結(一)——H2數據庫入門
2、Java嵌入式數據庫H2學習總結(二)——在Web應用程序中使用H2數據庫
3、Java嵌入式數據庫H2學習總結(三)——在Web應用中嵌入H2數據庫