JPA+H2内嵌数据库

开发个人项目的时候有时候会遇到,用数据库过于麻烦,这时候内嵌一个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

猜你喜欢

转载自blog.csdn.net/qq_21078159/article/details/106544525