开发个人项目的时候有时候会遇到,用数据库过于麻烦,这时候内嵌一个H2是一个不错的选择。
更何况H2提供管理控制台界面,可以直接执行Sql语句
项目里要内嵌H2的话需要引入H2的依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
版本选择上是因为比较新的H2不会自动建库 这是能自动建库里的比较新的版本[不知道以后会不会回归这一特性]
用的是SpringBoot + Jpa的项目 yml配置如下
其中 /console 指的是项目路径/console 这个地址会变成H2的Web管理地址
当然也可以DataGrip去连接 但是一般来说没有必要
spring:
datasource:
url: jdbc:h2:tcp://0.0.0.0:9092/./rest
platform: h2
username: sa
password: rest
driverClassName: org.h2.Driver
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: false
use_sql_comments: true
format_sql: true
h2:
console:
enabled: true
path: /console
settings:
trace: false
web-allow-others: true
server:
port: 5555
启动H2的话需要调用H2 tools包
直接正则读取配置文件application.yml里面数据源的配置 用H2生成一个数据库 然后JPA直接连接
代码如下
package com.binary.rest;
import org.h2.tools.Server;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
@SpringBootApplication
public class RestApplication {
private static final Logger log = LoggerFactory.getLogger(RestApplication.class);
static {
try {
InputStream inputStream = RestApplication.class.getClassLoader().getResourceAsStream("application.yml");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while ((line = (reader.readLine())) != null) {
if (line.matches(".*jdbc:h2:tcp:.*")) {
String port = line.replaceAll("^.*tcp://.*?:(\\d+)/.*$", "$1");
Server server = Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort",
port);
log.info("启动H2数据库.... {}", line);
server.start();
}
}
} catch (Exception e) {
log.error("启动H2服务报错 ... {}", e.getMessage());
e.printStackTrace();
}
}
public static void main(String[] args) {
SpringApplication.run(RestApplication.class, args);
}
}
这样的话能比迅捷的开发个人项目,部署也比较方便
完整项目地址放在码云仓库 https://gitee.com/1772766657/H2AndJpaTest.git