前言
这篇文章的相关内容 基于 JavaFX 整合了 SpringBoot 的项目,如果不熟悉的可以看我之前的博客: juejin.cn/post/745598…
在使用SpringBoot 进行开发的时候,我们最常用到的数据库就是MySQL,但是MySQL存在很多问题,例如:
- 需要本地有正在运行的MySQL服务,传递给别人时,还需要考虑对方是否具备环境。(8.0 还是 5.7)
- 传递给别人时,数据库的内容只能导出为SQL文件给别人运行完之后才能读取.
- 针对不同的用户,需要调整对应的用户名与密码,有些情况下还要修改url或者Driver
那有没有一种数据库,在不具备环境的情况下就能读取数据库,而且传递给别人时还可以直接使用呢?
而JavaFX最终的目的是形成桌面程序,显然不能使用MySQL,这就引入了我们今天的 H2 数据库。Maven依赖在最下面
H2 相关配置
数据库配置
在IDEA中打开 整合了JavaFX与SpringBoot 的项目,找到 application.yaml,将数据库配置更改为H2的相关内容,如下:
datasource:
url: jdbc:h2:file:./db/myData;SCHEMA=PUBLIC;DB_CLOSE_DELAY=0;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
driver-class-name: org.h2.Driver
username: sa
password:
其中,url 属性中的 各个选项解释如下:
jdbc:h2:file:./db/myData : 表示采用文件的形式保存数据库。对应的路径为 项目目录/db/myData
如果不需要具体的文件,可以修改成 jdbc:h2:mem:testdb,表示在内存中创建testdb作为数据库。
其他属性:
SCHEMA=PUBLIC,表示采用H2的默认数据库模式
DB_CLOSE_DELAY= 0,表示数据库在应用程序结束的时候主动关闭,属性值代表数据库关闭的时间,以秒为计数单位。若为 -1,则不关闭 DB_CLOSE_ON_EXIT = TRUE,表示数据库在JVM退出时是否允许关闭数据库。 MODE = MYSQL,表示对SQL语句的解析采用MYSQL语法。
H2 配置
除了配置上述的数据库属性,还需要针对H2本身进行一系列的配置调整。如下:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=0;DB_CLOSE_ON_EXIT=TRUE;MODE=MYSQL
driver-class-name: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true
path: /h2-console
settings:
trace: false
web-allow-others: false
属性的相关解释如下:
console.enabled = ture,表示开启H2控制台,在控制台中可以管理H2数据库的内容
console.path = /h2-console ,表示可以在浏览器中通过 项目访问地址/h2-console 访问H2控制台。 console.settings.trace = false ,表示 不启用控制台的追踪,即输出控制台的日志等信息。 console.settings.web-allow-others = false ,表示不允许其他主机访问 H2控制台。
H2 属性应该与 datasource 同级,位于Spring属性下
SQL 的设置
修改配置
在 application.yaml 中 添加:(sql 属性与 H2 同级)
sql:
init:
schema-locations: classpath:db/schema.sql
data-locations: classpath:db/data.sql
mode: always
对内部属性的解释如下:
sql.init.shema-locations : classpath:db/schema.sql ,表示 初始化脚本 位于 项目的相对路径(resource/) db/shema.sql.
sql.init.data-locations : classpath:db/data.sql , 表示 数据脚本 位于 项目的相对路径(resource/) db/data.sql sql.init.mode = always : 表示在应用程序启动时总是执行初始化脚本。其他属性如下:embedded: 仅在嵌入式数据库(如H2) 中执行初始化脚本.
never: 从不执行初始化脚本. not-exists: 仅在数据库中不存在任何表时执行初始化脚本.
SQL文件的内容设置
从上一步,我们已经知道存在两个SQL文件—— schema.sql 和 data.sql
将它们在对应路径创建后,分别编辑内部内容,示例如下:(上面设置了MYSQL语法)schema.sql:
DROP TABLE IF EXISTS `users1`;
CREATE TABLE IF NOT EXISTS `users`
(
`id` INT NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`phone` varchar(255) NOT NULL,
primary key (`id`)
) ENGINE = InnoDB,CHARACTER SET = utf8mb4;
data.sql:
INSERT IGNORE INTO `users`(`id`, `name`, `password`, `phone`) VALUES
(1, 'lcy', '123456', '12345678900'),
(2, 'TaogLi', '123', '12345678900'),
(3, 'zhb', '123456', '12345678900');
Maven 依赖
仅需要在之前的依赖基础上添加H2的依赖即可,如下:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
其他
- JavaFX 对 H2数据库并没有任何不兼容的点,所以只要将MySQL相关的内容替换成H2就能成功整合。
- 可以通过Mybatis-plus 等技术来对H2数据库进行操作,过程和 MySQL差不多,这里不赘述。
- 嵌入式数据库 是桌面应用不能忽略的一个点,这里采用 H2 实现,除了 H2 还有 shiro等。
总结
这篇文章主要讲述了 如何在SpringBoot 已经整合了JavaFx的情况下配置H2,为后续的打包EXE建立了良好的基础。