文章目录
- 一,序
- 二,自动创建数据库
- 1. 数据源配置
- 2. 修改支持数据库创建
- 三,自动创建数据库表以及数据
- 1. 准备DDL、DML语句
- 1.)典型DDL语句
- 2.)典型DML语句
- 2. 设置初始化参数
- 四、源码传送
一,序
针对Java工程启动时自动创建数据库、数据表的需求
对 java、springmvc工程,我们需要自己动手去实现创建数据表、表数据,具体请移步参阅:JAVA工程启动时自动创建数据库、数据表
下面我们来探讨在Springboot下怎么去实现
二,自动创建数据库
1. 数据源配置
我们知道,springboot工程配置数据源一般采用yaml或properties文件的方式
典型的例子如下
spring:
datasource:
url: ${}
username: ${}
password: ${}
driverClassName: ${}
type:
sqlScriptEncoding: utf-8
initializationMode: always
schema: classpath:sql/
data: classpath:sql/
continueOnError: true
这里yaml文件引用了properties文件
=jdbc:mysql://127.0.0.1:3306/hello?useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
=
=root
=root123
=stat
=2
=20
=60000
=60000
=300000
=SELECT 1
=true
=false
=false
=false
=200
2. 修改支持数据库创建
修改properties文件参数添加&createDatabaseIfNotExist=true
注意这里配置的一定要有建库权限
,否则数据库不存在的前提下,会创建失败。
=jdbc:mysql://127.0.0.1:3306/hello?useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&createDatabaseIfNotExist=true
=
=root
=root123
三,自动创建数据库表以及数据
1. 准备DDL、DML语句
1.)典型DDL语句
DDL是数据定义语言,主要用来对数据库表结构进行操作,不涉及具体数据,一般保存在
USE `hello`;
DROP TABLE IF EXISTS `boot_log`;
CREATE TABLE IF NOT EXISTS `boot_log` (
`id` bigint NOT NULL AUTO_INCREMENT ,
`event_id` varchar(50) ,
`event_date` datetime ,
`thread` varchar(255) ,
`class` varchar(255) ,
`function` varchar(255) ,
`message` varchar(255) ,
`exception` text,
`level` varchar(255) ,
`time` datetime,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS `user`;
CREATE TABLE IF NOT EXISTS `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
);
2.)典型DML语句
DML是数据操作语言,主要用来对数据库里的数据进行操作,涉及具体数据,一般保存在
INSERT INTO `user` VALUES ('1', 'username_001', '111111');
INSERT INTO `user` VALUES ('2', 'username_002', '222222');
--重复插入,模拟异常
INSERT INTO `user` VALUES ('1', 'username_001', '123456');
INSERT INTO `user` VALUES ('3', 'username_003', '333333');
INSERT INTO `user` VALUES ('4', 'username_004', '444444');
2. 设置初始化参数
观察上面的文件,涉及数据库初始化的参数主要有:
sqlScriptEncoding: utf-8
initializationMode: always
schema: classpath:sql/
data: classpath:sql/
continueOnError: true
参数 | 说明 |
---|---|
sqlScriptEncoding | 编码 |
initializationMode | 初始化行为,取值ALWAYS、EMBEDDED、NEVER |
schema | 指定DDL脚本位置 |
schemaUsername | 可选,指定DDL用户名 |
schemaPassword | 可选,指定DDL用户密码 |
data | 指定DML位置 |
dataUsername | 可选,指定DML用户名 |
dataPassword | 可选,指定DML用户密码 |
continueOnError | 出错是否继续 |
注意以上说明,是针对springboot2.5.0
之前版本,springboot2.5.0之后版本
配置变成如下:
spring:
datasource:
username: root
password: root123
url: jdbc:mysql://localhost:3306/testdb?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
sql:
init:
mode: ALWAYS
encoding: utf-8
username: root
password: root123
continueOnError: true
schemaLocations: classpath:
dataLocations: classpath:
大家自行研究测试!
四、源码传送
/00fly/effict-side/tree/master/springboot-log
有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!
–over–