【H2实践】之 SpringBoot 整合

news2024/12/23 20:25:38

目标

本文紧接上篇【H2实践】之认识 H2,上篇简单介绍了 H2 及其使用,本文继上篇,探索 H2 与 SpringBoot 的整合。

主要实现目标:
1、SpringBoot 连接 H2 内存数据库,并对数据库进行管理。
2、访问 H2 Console 客户端

分析

访问 SpringBoot 官网对 H2 的支持,详细内容如下图所示:
在这里插入图片描述

过程

原理不再赘述,下面直接上代码。

1、创建项目
使用 SpringBoot 搭建项目,pom 文件如下所示:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.9</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.xzbd</groupId>
	<artifactId>jh2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>jh2</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>11</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
 </dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

选用的依赖主要有 spring-boot-starter-webspring-boot-starter-data-jpah2lombok 等。

配置

application.yml 配置文件内容

spring:
  jpa:
    database: h2
    show-sql: true
    hibernate:
      ddl-auto: update
  datasource:
    username: sa
    password: 123456
    url: jdbc:h2:./data/jh2;AUTO_SERVER=TRUE;AUTO_RECONNECT=TRUE
    driver-class-name: org.h2.Driver

  h2:
    console:
      enabled: true
      path: /h2-console
      settings:
        web-allow-others: true

配置中表明:

1、使用 JPA 作为 ORM 框架,JPA 的属性中指明使用数据库类型 为 H2 , 打印 SQL , Hibernate.ddl-auto 表示程序启动时根据数据模型更新数据库中的表。

2、数据源配置中,用户名是 sa , 密码是 123456 (sa 用户的密码),数据库连接及 H2 数据库 JDBC 驱动。其中 url: jdbc:h2:./data/jh2; 表示数据存储在程序启动目录的 ./data/ 目录下,并以 jh2 作为数据库名创建相关数据库文件。如果目录 ./data/ 不存在,启动时会自动创建。 AUTO_SERVER=TRUE; 表示自启数据库服务,AUTO_RECONNECT=TRUE 表示自动重连。更多H2连接配置见文末附

3、h2 配置是 spring 整合 h2 的配置项,主要是对 H2 Console 客户端的配置,enable 表示是否启用 H2 console 客户端,true 表示启用;path 表示 H2 Console 的访问路径,本示例中,程序启动成功后可以使用 http://localhost:8080:/h2-console 访问 H2 的 console 客户端。其中 8080 是程序的端口。

启动应用

在这里插入图片描述
如上图,启动程序后,项目 根路径下创建了 data 目录,并且以 jh2 为名称创建了三个数据库相关的db文件。同时启动日志中打印了 H2 Console 客户端访问路径和应用所有端口及访问路径。

访问 H2 客户端

上一章节提到,应用启动成功后,可以在日志中找到应用访问信息和H2 Console 客户端访问信息。根据本示例信息,H2 客户端访问连接为: http://localhost:8080/h2-console/。使用浏览器打开该链接,效果如下图所示。
在这里插入图片描述
输入 JDBC URLjdbc:h2:./data/jh2
输入 Password : 123456
测试连接,效果如下图
在这里插入图片描述
重新输入密码,连接后的效果图如下:
在这里插入图片描述
如此及完成了 SpringBoot 与 H2 数据库的整合。

总结

SpringBoot 官方对 H2 做了很好的整合。当 SpringBoot 应用启动时,应用会自己创建 H2 数据库文件,启动 H2 数据库服务,并支持 H2 数据库 web 客户端 Console 的连接。

接下来只需要 定义数据模型,并根据业务处理数据,最后保存数据即可。

H2数据库连接
数据库支持多种连接模式和连接设置,不同的连接模式和连接设置是通过不同的URL来区分的,URL中的设置是不区分大小写。

1、嵌入式(本地)连接

jdbc:h2:[file:][<path>]<databaseName>
jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)

2、内存数据库(私有)

jdbc:h2:mem:

3、内存数据库(被命名)

jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test_mem

4、使用TCP/IP的服务器模式(远程连接)

jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:tcp://localhost/~/test
jdbc:h2:tcp://dbserv:8084/~/sample

5、使用SSL/TLS的服务器模式(远程连接)

jdbc:h2:ssl://<server>[:<port>]/<databaseName>
jdbc:h2:ssl://secureserv:8085/~/sample;

7、使用加密文件

jdbc:h2:<url>;CIPHER=[AES|XTEA]
jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES
jdbc:h2:file:~/secure;CIPHER=XTEA

8、文件锁

jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET}
jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO
jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET

9、仅打开存在的数据库

jdbc:h2:<url>;IFEXISTS=TRUE
jdbc:h2:file:~/sample;IFEXISTS=TRUE

10、当虚拟机退出时并不关闭数据库

jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE

11、用户名和密码

jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]
jdbc:h2:file:~/sample;USER=sa;PASSWORD=123

12、更新记入索引

jdbc:h2:<url>;LOG=2
jdbc:h2:file:~/sample;LOG=2

13、调试跟踪项设置

jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>
jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3

14、忽略位置参数设置

jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE

15、指定文件读写模式

jdbc:h2:<url>;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws

16、在Zip文件中的数据库

jdbc:h2:zip:<zipFileName>!/<databaseName>
jdbc:h2:zip:~/db.zip!/test

17、兼容模式

jdbc:h2:<url>;MODE=<databaseType>
jdbc:h2:~/test;MODE=MYSQL

18、自动重连接

jdbc:h2:<url>;AUTO_RECONNECT=TRUE
jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE

19、自动混合模式

jdbc:h2:<url>;AUTO_SERVER=TRUE
jdbc:h2:~/test;AUTO_SERVER=TRUE

20、更改其他设置

jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...]
jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3

系列文章
1、【H2实践】之认识 H2
2、【H2实践】之 SpringBoot 整合
3、【H2实践】之 SpringBoot 与 H2 数据交互

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytest 自动化测试框架

Pytest和Unittest测试框架的区别&#xff1f; 如何区分这两者&#xff0c;很简单unittest作为官方的测试框架&#xff0c;在测试方面更加基础&#xff0c;并且可以再次基础上进行二次开发&#xff0c;同时在用法上格式会更加复杂&#xff1b;而pytest框架作为第三方框架&#x…

52癫痫发作预测的有效双自注意力残差网络

Effective dual self-attentional residual networks for epileptic seizure prediction 摘要 癫痫发作预测作为慢性脑疾病中最具挑战性的数据分析任务之一&#xff0c;引起了众多研究者的广泛关注。癫痫发作预测&#xff0c;可以在许多方面大大提高患者的生活质量&#xff0…

springboot项目配置序列化,反序列化器

介绍本文介绍在项目中时间类型、枚举类型的序列化和反序列化自定义的处理类&#xff0c;也可以使用注解。建议枚举都实现一个统一的接口&#xff0c;方便处理。我这定义了一个Dict接口。枚举类型注解处理这种方式比较灵活&#xff0c;可以让枚举按照自己的方式序列化&#xff0…

三种通用方法——惠普电脑硬盘数据恢复

随着当今数字时代的到来&#xff0c;人们对于计算机硬盘上存储的数据越来越重视。然而&#xff0c;电脑硬盘也时常会发生数据丢失的情况&#xff0c;这时候就需要进行数据恢复。惠普电脑是市面上比较常见的品牌之一&#xff0c;因此本文将从惠普电脑硬盘数据恢复的角度出发&…

【你不知道的事】JavaScript 中用一种更先进的方式进行深拷贝:structuredClone

你是否知道&#xff0c;JavaScript中有一种原生的方法来做对象的深拷贝? 本文我们要介绍的是 structuredClone 函数&#xff0c;它是内置在 JavaScript 运行时中的: const calendarEvent {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve…

EXCEL技能点3-常用技能1

1 引用格式 公式中引用单元格或者区域时,引用的类型可分为以下三种: 绝对引用 相对引用 混合引用 在Excel里&#xff0c;每个单元格都有一个编码&#xff0c;就像人的身份证一样&#xff0c;在Excel里是按照行列进行编码&#xff0c;例如A1就是第一列的第一行。 那么我们想要引…

QEMU启动x86-Linux内核

目录QEMU简介linux启动流程我的环境安装QEMU软件包安装源码安装编译linux内核编译busybox制作initramfs使用QEMU启动linux内核简化命令参考QEMU简介 QEMU&#xff08;quick emulator&#xff09;是一个通用的、开源的硬件模拟器&#xff0c;可以模拟不同硬件架构&#xff08;如…

Docker入门 第四部分

Docker 的优势 Docker 相比于传统虚拟化方式具有更多的优势&#xff1a; Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。 Docker 需要的资源更少。Docker 在操作系统级别进行虚拟化&#xff0c;Docker 容器和内核交互&#xff0c;几乎没有性能损耗&#xff0c;性能…

Windows安装Hadoop

当初搭建Hadoop、Hive、HBase、Flink等这些没有截图写文&#xff0c;今为分享特重装。下载Hadoop下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/以管理员身份运行cmd切换到所在目录执行start winrar x -y hadoop-3.3.4.tar.gz&#xff0c;解压。配置…

刚刚和ChatGPT聊了聊隐私计算

开放隐私计算ChatGPT最近太火了&#xff0c;作为一个背后有庞大数据支撑&#xff0c;而且还在不断进化的人工智能&#xff0c;每个人都想和它聊一聊。我们也不例外&#xff0c;于是刚刚和它聊了聊隐私计算那些事儿。先来几个行业问题&#xff0c;毕竟它背后有所有行业新闻、论文…

Python tkinter 如何实现网站下载工具?将所有数据一键获取

前言 铁汁们有没有想过&#xff0c;如何把几个代码的功能结合到一起呢&#xff1f; 有想过的话&#xff0c;有没有实现过呢&#xff1f; 其实很简单的啊&#xff0c;咱就写一个界面就好了&#xff0c;想要哪个代码运行&#xff0c;鼠标轻轻一点就行 开发环境 python 3.8: 解…

【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令

目录 一&#xff1a;概述 1.1. 何为版本控制 1.2. 为什么需要版本控制 1.3. 版本控制工具 1.4. Git 简史 1.5. Git 工作机制 1.6. Git和代码托管中心 二&#xff1a;安装 2.1. Git安装 三&#xff1a;常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库…

多节点部署一键启动脚本

1 背景 我们在实际项目开发的时候,往往一个大的项目需要很多人协同开发,大家都开发完成在一起联调的时候需要启动很多节点,如果每次都手动去启动所有节点效率非常低,所以我们可以写一个脚本一键启动所有进程,以下统称为节点。 根据节点依赖的环境,一键启动脚本分两种情…

电力电子中逐波限流控制以及dsp实现

逐波限流是指在电力系统运行中&#xff0c;对电力设备进行电流保护的一种措施。它的实现方式是通过对电力系统的电流进行逐波监测和控制&#xff0c;每一波电流都可以独立地进行限制&#xff0c;从而保护电力系统设备不受过载损坏或短路故障的影响。 逐波限流的作用是提高电力…

1. ELK Stack 理论篇之什么是ELK Stack?

ELK Stack 理论篇之什么是ELK Stack?1.1 什么是 ELK Stack&#xff1f;1.2 ELK Stack的发展史1.2.1 Elasticsearch1.2.2 引入 Logstash 和 Kibana&#xff0c;产品更强大1.2.3 社区越来越壮大&#xff0c;用例越来越丰富1.2.4 然后我们向 ELK 中加入了 Beats1.2.5 那么&#x…

es6模块

目录 一、语法说明 二、示例代码 三、运行测试 一.语法说明 JavaScript 现在有两种模块。一种是 ES6 模块&#xff0c;简称 ESM&#xff1b;另一种是 CommonJS 模块&#xff0c;简称 CJS。CommonJS 模块是 Node.js 专用的&#xff0c;与 ES6 模块不兼容。语法上面&#xff0…

XE开发Linux应用(二)-Webservice

新建一个工程。选择如图。继续输入服务名然后就生成对应的单元。增加linux 平台。完善对应的单元代码{ Invokable implementation File for Txaliontest which implements Ixaliontest }unit xaliontestImpl;interfaceuses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns…

Hive常用内置函数、窗口函数及自定义函数

文章目录一、字符串函数二、数值函数三、日期函数四、其余常用函数五、窗口函数5.1、语法5.2、常用窗口函数六、自定义函数6.1、自定义UDF函数6.2、自定义UDTF函数6.3、将自定义函数导入hive中6.3.1、将项目打成jar包6.3.2、将jar包传入hive目录6.3.3、在hive中加载jar包6.3.4、…

C++回顾(二十五)—— map/multimap容器

25.1 map/multimap的简介 map是标准的关联式容器&#xff0c;一个map是一个键值对序列&#xff0c;即(key,value)对。它提供基于key的快速检索能力。map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入&#xff0c;所以不能指定插入位置。map的…

BN,LN,IN,GN的理解和用法

绿色区域表示将该区域作用域(四种方法都贯穿了w,h维度)&#xff0c;即将该区域数值进行归一化&#xff0c;变为均值为0&#xff0c;标准差为1。BN的作用区域时N,W,H,表示一个batch数据的每一个通道均值为0&#xff0c;标准差为1&#xff1b;LN则是让每个数据的所有channel的均值…