一,序
針對Java工程啟動時自動創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表的需求
對 java、springmvc工程,我們需要自己動手去實現(xiàn)創(chuàng)建數(shù)據(jù)表、表數(shù)據(jù),具體請移步參閱:JAVA工程啟動時自動創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表
下面我們來探討在Springboot下怎么去實現(xiàn)
二,自動創(chuàng)建數(shù)據(jù)庫
1. 數(shù)據(jù)源配置
我們知道,springboot工程配置數(shù)據(jù)源一般采用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-8
initializationMode: 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=2
druid.maxActive=20
druid.maxWait=60000
druid.timeBetweenEvictionRunsMillis=60000
druid.minEvictableIdleTimeMillis=300000
druid.validationQuery=SELECT 1
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
druid.poolPreparedStatements=false
druid.maxPoolPreparedStatementPerConnectionSize=200
2. 修改支持數(shù)據(jù)庫創(chuàng)建
修改properties文件druid.url參數(shù)添加&createDatabaseIfNotExist=true
注意這里配置的druid.username一定要有建庫權(quán)限
,否則數(shù)據(jù)庫不存在的前提下,會創(chuàng)建失敗。
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
三,自動創(chuàng)建數(shù)據(jù)庫表以及數(shù)據(jù)
1. 準備DDL、DML語句
1.)典型DDL語句
DDL是數(shù)據(jù)定義語言,主要用來對數(shù)據(jù)庫表結(jié)構(gòu)進行操作,不涉及具體數(shù)據(jù),一般保存在 schema.sql
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是數(shù)據(jù)操作語言,主要用來對數(shù)據(jù)庫里的數(shù)據(jù)進行操作,涉及具體數(shù)據(jù),一般保存在data.sql
INSERT INTO `user` VALUES ('1', 'username_001', '111111');
INSERT INTO `user` VALUES ('2', 'username_002', '222222');
--重復(fù)插入,模擬異常
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. 設(shè)置初始化參數(shù)
觀察上面的application.yml文件,涉及數(shù)據(jù)庫初始化的參數(shù)主要有:
sqlScriptEncoding: utf-8
initializationMode: always
schema: classpath:sql/schema.sql
data: classpath:sql/data.sql
continueOnError: true
參數(shù) | 說明 |
---|---|
sqlScriptEncoding | 編碼 |
initializationMode | 初始化行為,取值A(chǔ)LWAYS、EMBEDDED、NEVER |
schema | 指定DDL腳本位置 |
schemaUsername | 可選,指定DDL用戶名 |
schemaPassword | 可選,指定DDL用戶密碼 |
data | 指定DML位置 |
dataUsername | 可選,指定DML用戶名 |
dataPassword | 可選,指定DML用戶密碼 |
continueOnError | 出錯是否繼續(xù) |
注意以上說明,是針對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:schema.sql
dataLocations: classpath:data.sql
大家自行研究測試!
四、源碼傳送
https://gitee.com/00fly/effict-side/tree/master/springboot-log
有任何問題和建議,都可以向我提問討論,大家一起進步,謝謝!文章來源:http://www.zghlxwxcb.cn/news/detail-781972.html
–over–文章來源地址http://www.zghlxwxcb.cn/news/detail-781972.html
到了這里,關(guān)于SpringBoot工程啟動時自動創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!