SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

码农世界 2024-06-18 后端 110 次浏览 0个评论

1.H2 数据库介绍(度娘的)

H2数据库是一个用Java编写的开源的关系型数据库管理系统(RDBMS),具有轻量级、快速、免费的特点。它可以嵌入到Java应用程序中作为嵌入式数据库运行,也可以在客户端-服务器模式下运行,允许远程访问。H2数据库主要用于测试和开发阶段,但也适用于轻量级的生产应用。

以下是H2数据库的主要特点:

  1. 轻量级和快速:H2数据库非常小巧,通常以一个单一的JAR文件提供,易于集成到Java应用程序中。它对内存和处理器的要求较低,从而提供了高效的性能。
  2. 内存数据库:H2支持内存模式,即数据库可以存储在RAM中,这提供了非常高的访问速度和查询性能。但请注意,在这种模式下,数据不会持久存储在磁盘上。
  3. 嵌入式数据库:在嵌入式模式下,H2数据库可以嵌入到Java应用程序中,无需安装或管理一个独立的数据库系统。
  4. 客户端-服务器模式:除了嵌入式模式外,H2也可以配置为一个独立的数据库服务器,支持远程访问。
  5. 支持SQL和JDBC:H2数据库兼容大多数SQL标准,并提供了JDBC API,使得开发者能够使用标准的SQL语句进行数据库操作。
  6. 附加功能:H2还提供了基于磁盘或内存的数据库和表、只读数据库支持、临时表等附加功能。

H2数据库的使用场景非常广泛,包括但不限于企业应用开发、桌面应用开发、移动应用开发等。在这些场景中,H2数据库能够提供一个可靠、容量大、运行稳定、响应迅速、性能高的数据存储环境。此外,当某些场景下数据模型必须为关系型时,H2数据库也可以充当Memcached使用,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据。

总的来说,H2数据库是一个功能强大、灵活且易于使用的轻量级数据库,特别适用于需要快速、高效且易于集成的数据库解决方案的场景。

官方致命文档:H2 Database Engine

备注:作者通过内嵌以及服务器两种方式连接H2数据库,均测试成功。步骤描述涉及两种方式。

2.通过官方文档连接下载H2数据库包:

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

3.mySql数据库转换成H2数据库:

Idea下载mysqlToH2插件。IDea 工具栏点开 MySql To H2,将Mysql数据库导出的sql语句转换一下。如下图:

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

4.解压步骤2中下载的H2数据库,执行bin目录下.bat文件(window环境)

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

5.执行后在菜单栏找到h2-ConSole图标,右键图标创建一个新的数据库。linux系统可通过命令创建(自行度娘)。

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

6.通过h2-console连接刚创建的数据库

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

7.连接创建好的数据库:通过下图框中执行sql语句,也可以通过h2控制台工具执行sql语句。这里通过步骤3 mySql转h2的sql文件直接执行是不成功的,需要做部分修改。主要是修改点有:部分字段数据类型

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

7.1 数据库修改对比:

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

备注:本人迁移的数据库表比较少,基本上是手动修改的;如果有其他更好的办法,可以相互交流。

8.renren-damin下 pom.xml配置。

dependencies下添加:

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

        

            org.springframework.boot

            spring-boot-starter-web

            

            

                

                    org.springframework.boot

                    spring-boot-starter-tomcat

                

            

        

        

            org.springframework.boot

            spring-boot-starter-jetty

        

        

        

            com.h2database

            h2

            2.2.224

        

build下添加:

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

            

                src/main/resources

                true

            

            

                db

                true

                

                    **/*

                

                ${project.build.outputDirectory}/db

            

            

                ${project.basedir}/dist

                META-INF/resources

            

注:此处DB文件夹也是框架自带的,如果框架内嵌方式连接数据库,可将DB路径下 mysql.sql文件替换成自己生成的sql文件。如图:

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

9.内嵌方式手动执行sql文件。在renren-admin->src->main->java->io->renren->common->config目录(路径根据自己实际情况来)下创建H2DataSourceConfig类。如果在步骤7中自己创建了数据库文件,H2DataSourceConfig类执行要生成的数据库文件也可以用步骤7生成的替代。

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

package io.renren.common.config;

import com.google.common.collect.Lists;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.autoconfigure.AutoConfigureAfter;

import org.springframework.core.io.ClassPathResource;

import org.springframework.core.io.Resource;

import org.springframework.core.io.support.EncodedResource;

import org.springframework.jdbc.datasource.init.ScriptUtils;

import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

import javax.sql.DataSource;

import java.io.File;

import java.util.List;

/**

 * 初始化h2数据库

 */

@Slf4j

@Service

@AutoConfigureAfter(DataSource.class) //DataSource创建完后才初始化此类

public class H2DataSourceConfig {

    /**

     * 初始化sql文件所在位置

     */

    private static final List SCHEMAS = Lists.newArrayList(

            "db/mysql.sql"

/*            "db/generator/mysql.sql",

            "db/region_data/mysql.sql"*/

    );

    @Autowired

    DataSource dataSource;

    @Value("${h2.file-path}")

    private String filePath;

    @Value("${h2.db-name}")

    private String dbName;

    @PostConstruct

    public void init() throws Exception {

        //初始化本地数据库

        // 创建一个标识文件,只有在第一次初始化数据库时会创建,如果系统用户目录下有这个文件,就不会重新执行sql脚本

        File f = new File(filePath + File.separator+dbName+".lock");

        if(!f.exists()){

            log.info("--------------初始化h2数据----------------------");

            log.info("{}",f.getPath());

            f.getParentFile().mkdirs();

            f.createNewFile();

            for (String schema : SCHEMAS) {

                // 加载资源文件

                Resource resource = new ClassPathResource(schema);

                EncodedResource encodedResource = new EncodedResource(resource, "utf-8");

                // 手动执行SQL语句

                ScriptUtils.executeSqlScript(dataSource.getConnection(),encodedResource);

            }

        }

    }

}

10.renren-admin 下 application.yml配置修改:

10.1

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

# Tomcat

server:

  jetty:

    acceptors: 2

    selectors: 4

    request-header-size: 8192

    max-http-form-post-size: 1048576

  port: 8888

  servlet:

    context-path: /network-admin

    session:

      cookie:

        http-only: true

10.2

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

  h2:

  #如需通过可视化界面访问数据库,需要配置以下参数

  console:

    path: /h2-console  #h2嵌入式数据库控制台,可以通过浏览器访问

    enabled: true

  resources:

    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

#h2数据库配置

h2:

  #数据库名称

  db-name: netool

  #数据库文件地址

  #file-path: E:\h2\data\file

  file-path: /opt/h2-test/file

11. renren-admin下application-prod.yml 配置文件修改(根据自己实际使用配置文件对应修改)

SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库

内嵌模式连接:

      driver-class-name: org.h2.Driver

      #内嵌连接模式

      url: jdbc:h2:file:${h2.file-path}/${h2.db-name};MODE=MYSQL

      username: root

      password: 123456

      initialization-mode: always

服务器模式连接:

      driver-class-name: org.h2.Driver

      #混合连接模式

      #url: jdbc:h2:tcp://192.168.2.74/E:/h2/data/data/netool

      #url: jdbc:h2:tcp://192.168.2.20/./netool

      username: root

      password: 123456

      initialization-mode: always

12.总结:服务器模式需要手动先启动h2数据库,内嵌模式不需要。linux系统可用下面的启动命令:java -jar h2-2.2.224.jar -tcp -tcpAllowOthers -webAllowOthers 或者

java -cp h2*.jar org.h2.tools.Server -webDaemon -tcpAllowOthers -baseDir /opt/h2-data/h2/data/dist       baseDir为自己数据库路径。

转载请注明来自码农世界,本文标题:《SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,110人围观)参与讨论

还没有评论,来说两句吧...

Top