0


SpringBoot工程启动时自动创建数据库、数据表

文章目录

一,序

针对Java工程启动时自动创建数据库、数据表的需求

对 java、springmvc工程,我们需要自己动手去实现创建数据表、表数据,具体请移步参阅:JAVA工程启动时自动创建数据库、数据表

下面我们来探讨在Springboot下怎么去实现

二,自动创建数据库

1. 数据源配置

我们知道,springboot工程配置数据源一般采用yaml或properties文件的方式
典型的例子如下
application.yml

spring:datasource:url: ${druid.url}username: ${druid.username}password: ${druid.password}driverClassName: ${druid.driverClassName}type: com.alibaba.druid.pool.DruidDataSource
    sqlScriptEncoding: utf-8initializationMode: always
    schema: classpath:sql/schema.sql
    data: classpath:sql/data.sql
    continueOnError:true

这里yaml文件引用了properties文件

druid.url=jdbc:mysql://127.0.0.1:3306/hello?useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
druid.driverClassName=com.mysql.cj.jdbc.Driver
druid.username=root
druid.password=root123
druid.filters=stat
druid.initialSize=2druid.maxActive=20druid.maxWait=60000druid.timeBetweenEvictionRunsMillis=60000druid.minEvictableIdleTimeMillis=300000druid.validationQuery=SELECT 1druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
druid.poolPreparedStatements=false
druid.maxPoolPreparedStatementPerConnectionSize=200

2. 修改支持数据库创建

修改properties文件druid.url参数添加

&createDatabaseIfNotExist=true

注意这里配置的druid.username一定要有

建库权限

,否则数据库不存在的前提下,会创建失败。

druid.url=jdbc:mysql://127.0.0.1:3306/hello?useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&createDatabaseIfNotExist=true
druid.driverClassName=com.mysql.cj.jdbc.Driver
druid.username=root
druid.password=root123

三,自动创建数据库表以及数据

1. 准备DDL、DML语句

1.)典型DDL语句

DDL是数据定义语言,主要用来对数据库表结构进行操作,不涉及具体数据,一般保存在 schema.sql

USE`hello`;DROPTABLEIFEXISTS`boot_log`;CREATETABLEIFNOTEXISTS`boot_log`(`id`bigintNOTNULLAUTO_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,PRIMARYKEY(id));DROPTABLEIFEXISTS`user`;CREATETABLEIFNOTEXISTS`user`(`id`bigintNOTNULLAUTO_INCREMENT,`username`varchar(20)DEFAULTNULL,`password`varchar(20)DEFAULTNULL,PRIMARYKEY(`id`));

2.)典型DML语句

DML是数据操作语言,主要用来对数据库里的数据进行操作,涉及具体数据,一般保存在data.sql

INSERTINTO`user`VALUES('1','username_001','111111');INSERTINTO`user`VALUES('2','username_002','222222');--重复插入,模拟异常INSERTINTO`user`VALUES('1','username_001','123456');INSERTINTO`user`VALUES('3','username_003','333333');INSERTINTO`user`VALUES('4','username_004','444444');

2. 设置初始化参数

观察上面的application.yml文件,涉及数据库初始化的参数主要有:

sqlScriptEncoding: utf-8initializationMode: always
    schema: classpath:sql/schema.sql
    data: classpath:sql/data.sql
    continueOnError:true

参数说明sqlScriptEncoding编码initializationMode初始化行为,取值ALWAYS、EMBEDDED、NEVERschema指定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=truesql:init:mode: ALWAYS
      encoding: utf-8username: root
      password: root123
      continueOnError:trueschemaLocations: classpath:schema.sql
      dataLocations: classpath:data.sql

大家自行研究测试!

四、源码传送

https://gitee.com/00fly/effict-side/tree/master/springboot-log

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

–over–


本文转载自: https://blog.csdn.net/qq_16127313/article/details/134099991
版权归原作者 爱码少年 所有, 如有侵权,请联系我们删除。

“SpringBoot工程启动时自动创建数据库、数据表”的评论:

还没有评论