0


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

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数据库包:

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

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

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

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

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

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

7.1 数据库修改对比:

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

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

dependencies下添加:

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
         <!-- 排除默认的 Tomcat 依赖 -->
         <exclusions>
             <exclusion>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-tomcat</artifactId>
             </exclusion>
         </exclusions>
     </dependency>

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-jetty</artifactId>
     </dependency>

    <!--h2数据库-->
     <dependency>
         <groupId>com.h2database</groupId>
         <artifactId>h2</artifactId>
         <version>2.2.224</version>
     </dependency>

build下添加:

        <resource>
             <directory>src/main/resources</directory>
             <filtering>true</filtering>
         </resource>
         <resource>
             <directory>db</directory>
             <filtering>true</filtering>
             <includes>
                 <include>**/*</include>
             </includes>
             <targetPath>${project.build.outputDirectory}/db</targetPath>
         </resource>

        <resource>
             <directory>${project.basedir}/dist</directory>
             <targetPath>META-INF/resources</targetPath>
         </resource>

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

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

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<String> 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

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

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

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

内嵌模式连接:

  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为自己数据库路径。


本文转载自: https://blog.csdn.net/dovelixian/article/details/137008757
版权归原作者 不一般的小白 所有, 如有侵权,请联系我们删除。

“SpringBoot-人人开源框架 整合H2数据库,MySql转H2数据库”的评论:

还没有评论