目标
本文紧接上篇【H2实践】之认识 H2,上篇简单介绍了 H2 及其使用,本文继上篇,探索 H2 与 SpringBoot 的整合。
主要实现目标:
1、SpringBoot 连接 H2 内存数据库,并对数据库进行管理。
2、访问 H2 Console 客户端
分析
访问 SpringBoot 官网对 H2 的支持,详细内容如下图所示:
过程
原理不再赘述,下面直接上代码。
1、创建项目
使用 SpringBoot 搭建项目,pom 文件如下所示:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xzbd</groupId>
<artifactId>jh2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jh2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
选用的依赖主要有 spring-boot-starter-web
、spring-boot-starter-data-jpa
、h2
、 lombok
等。
配置
application.yml
配置文件内容
spring:
jpa:
database: h2
show-sql: true
hibernate:
ddl-auto: update
datasource:
username: sa
password: 123456
url: jdbc:h2:./data/jh2;AUTO_SERVER=TRUE;AUTO_RECONNECT=TRUE
driver-class-name: org.h2.Driver
h2:
console:
enabled: true
path: /h2-console
settings:
web-allow-others: true
配置中表明:
1、使用 JPA 作为 ORM 框架,JPA 的属性中指明使用数据库类型 为 H2 , 打印 SQL , Hibernate.ddl-auto 表示程序启动时根据数据模型更新数据库中的表。
2、数据源配置中,用户名是 sa , 密码是 123456 (sa 用户的密码),数据库连接及 H2 数据库 JDBC 驱动。其中 url: jdbc:h2:./data/jh2;
表示数据存储在程序启动目录的 ./data/
目录下,并以 jh2 作为数据库名创建相关数据库文件。如果目录 ./data/
不存在,启动时会自动创建。 AUTO_SERVER=TRUE;
表示自启数据库服务,AUTO_RECONNECT=TRUE
表示自动重连。更多H2连接配置见文末附
3、h2 配置是 spring 整合 h2 的配置项,主要是对 H2 Console 客户端的配置,enable 表示是否启用 H2 console 客户端,true 表示启用;path 表示 H2 Console 的访问路径,本示例中,程序启动成功后可以使用 http://localhost:8080:/h2-console
访问 H2 的 console 客户端。其中 8080
是程序的端口。
启动应用
如上图,启动程序后,项目 根路径下创建了 data
目录,并且以 jh2
为名称创建了三个数据库相关的db
文件。同时启动日志中打印了 H2 Console 客户端访问路径和应用所有端口及访问路径。
访问 H2 客户端
上一章节提到,应用启动成功后,可以在日志中找到应用访问信息和H2 Console 客户端访问信息。根据本示例信息,H2 客户端访问连接为: http://localhost:8080/h2-console/
。使用浏览器打开该链接,效果如下图所示。
输入 JDBC URL
:jdbc:h2:./data/jh2
输入 Password
: 123456
测试连接,效果如下图
重新输入密码,连接后的效果图如下:
如此及完成了 SpringBoot 与 H2 数据库的整合。
总结
SpringBoot 官方对 H2 做了很好的整合。当 SpringBoot 应用启动时,应用会自己创建 H2 数据库文件,启动 H2 数据库服务,并支持 H2 数据库 web 客户端 Console 的连接。
接下来只需要 定义数据模型,并根据业务处理数据,最后保存数据即可。
附
H2数据库连接
数据库支持多种连接模式和连接设置,不同的连接模式和连接设置是通过不同的URL来区分的,URL中的设置是不区分大小写。
1、嵌入式(本地)连接
jdbc:h2:[file:][<path>]<databaseName>
jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)
2、内存数据库(私有)
jdbc:h2:mem:
3、内存数据库(被命名)
jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test_mem
4、使用TCP/IP的服务器模式(远程连接)
jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:tcp://localhost/~/test
jdbc:h2:tcp://dbserv:8084/~/sample
5、使用SSL/TLS的服务器模式(远程连接)
jdbc:h2:ssl://<server>[:<port>]/<databaseName>
jdbc:h2:ssl://secureserv:8085/~/sample;
7、使用加密文件
jdbc:h2:<url>;CIPHER=[AES|XTEA]
jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES
jdbc:h2:file:~/secure;CIPHER=XTEA
8、文件锁
jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET}
jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO
jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET
9、仅打开存在的数据库
jdbc:h2:<url>;IFEXISTS=TRUE
jdbc:h2:file:~/sample;IFEXISTS=TRUE
10、当虚拟机退出时并不关闭数据库
jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE
11、用户名和密码
jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]
jdbc:h2:file:~/sample;USER=sa;PASSWORD=123
12、更新记入索引
jdbc:h2:<url>;LOG=2
jdbc:h2:file:~/sample;LOG=2
13、调试跟踪项设置
jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>
jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3
14、忽略位置参数设置
jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE
15、指定文件读写模式
jdbc:h2:<url>;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws
16、在Zip文件中的数据库
jdbc:h2:zip:<zipFileName>!/<databaseName>
jdbc:h2:zip:~/db.zip!/test
17、兼容模式
jdbc:h2:<url>;MODE=<databaseType>
jdbc:h2:~/test;MODE=MYSQL
18、自动重连接
jdbc:h2:<url>;AUTO_RECONNECT=TRUE
jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE
19、自动混合模式
jdbc:h2:<url>;AUTO_SERVER=TRUE
jdbc:h2:~/test;AUTO_SERVER=TRUE
20、更改其他设置
jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...]
jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3
系列文章
1、【H2实践】之认识 H2
2、【H2实践】之 SpringBoot 整合
3、【H2实践】之 SpringBoot 与 H2 数据交互