springboot集成h2数据库
1. H2数据库简介
H2是一个轻量级的内存数据库,同时也支持数据持久化,并提供了数据库管理的Web界面。
使用方式:
- 下载并直接运行:从官网下载H2的JAR包,解压缩后执行
bin
目录下的h2.bat
或h2.sh
文件,在弹出的Web操作页面中进行数据库操作。 - Spring Boot内嵌使用:通过POM文件引入H2依赖,并进行相应的配置。启动服务后,可以通过指定的URL页面访问并操作数据库。
JDBC连接模式:
H2支持四种连接模式:
- 本地内存模式:数据仅存在于内存中,不会持久化。
- 本地文件系统持久化模式:数据可以持久化到本地文件系统。
- TCP/IP服务器模式:支持多客户端通过TCP/IP协议进行连接。
- 混合模式:首个客户端通过本地连接,其他客户端通过TCP/IP协议连接。
2. 为什么选择H2数据库
- 免安装:H2可以作为一个JAR包内嵌到应用程序中,类似于Spring Boot内嵌Tomcat,非常方便。
- 全面的JDBC支持:H2支持标准的JDBC URL连接方式,并提供事务支持,与MySQL类似。
3.如何使用
在我的业务场景中,数据需要持久化,因此这里使用本地文件系统持久化模式来演示。同时,实际使用H2时也离不开Flyway的管理,因此下面的例子也将集成Flyway。
1.引入依赖
在实际使用过程中,我发现Flyway的版本与H2存在兼容性问题。高版本的Flyway会导致information_schema.settings
表字段发生变化,从而在初始化时引发查询错误。因此,我们选择回退到一个较低版本的Flyway。
<?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">
<parent>
<artifactId>springboot-common-test</artifactId>
<groupId>com.gwliuc</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.h2study</groupId>
<artifactId>my-h2-study</artifactId>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.5.7</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
</dependencies>
</project>
2.添加配置
server:
port: 8180
spring:
h2:
console:
path: /h2-console
enabled: true
datasource:
url: jdbc:h2:D:\\data\\DEVICE_V2
driver-class-name: org.h2.Driver
username: GUANLI
password: 123456
flyway:
enabled: true
sql-migration-prefix: v
sql-migration-suffixes