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

这篇具有很好参考价值的文章主要介绍了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-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. 修改支持数据库创建

修改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`;

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是数据操作语言,主要用来对数据库里的数据进行操作,涉及具体数据,一般保存在data.sql

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. 设置初始化参数

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

    sqlScriptEncoding: utf-8
    initializationMode: always
    schema: classpath:sql/schema.sql
    data: classpath:sql/data.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:schema.sql
      dataLocations: classpath:data.sql

大家自行研究测试!

四、源码传送

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

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

–over–文章来源地址https://www.toymoban.com/news/detail-781972.html

到了这里,关于SpringBoot工程启动时自动创建数据库、数据表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 实践(3)配置DataSource及创建数据库

            前文讲述了利用MyEclipse2019开发工具,创建maven工程、加载springboot、swagger-ui功能。本文讲述创建数据库,为项目配置数据源,实现数据的增删改查服务,并通过swagger-ui界面举例调试服务控制器 创建数据库 项目使用MySQL 8.0.31数据,数据库的库表结构的建立可行方式

    2024年02月12日
    浏览(32)
  • java简述springboot内置数据库 并举例启动h2内存数据环境

    在前面 我们讲了 springboot 给我们提供了 默认的 数据源 默认 HikariCP 以及其他两种内置数据源 持久化技术 JdbcTemplate 那么 说起来很多人难以置信 不过 springboot 也真的给我们内置了数据库技术 而且不止一种 是三种 这三个数据库的特点在于 它们都是用java语言写的 就表示 它们

    2024年02月04日
    浏览(42)
  • Spring Data JPA之自动创建数据库表

    由于在项目中使用到了Spring Data JPA(Java Persistent API)进行项目开发,并且自己对JPA比较感兴趣想进行学习和了解。首先学习和了解的是JPA自动创建数据库表,通过JPA能够让软件工程师们不用再去手动创建数据表,能够减轻软件工程师们的工作量。 通过本篇博客可以实现使用

    2024年02月05日
    浏览(55)
  • 装饰工程管理系统|基于Springboot的装饰工程管理系统设计与实现(源码+数据库+文档)

    装饰工程管理系统-项目立项子系统目录 目录 基于Springboot的装饰工程管理系统设计与实现  一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 (2)合同报价管理 (3)装饰材料总计划管理 (4)客户管理 2、员工功能实现 (1)新增立项项目 (2)预算报价管理 (

    2024年04月11日
    浏览(39)
  • Oracle 12c/19c PDB数据库配置自动启动

    在Oracle 12c/19c多租户环境中,默认情况下,使用startup命令启动数据库实例后,你会发现PDB数据库的状态为MOUNT状态,PDB不会随着CDB启动而启动。如下例子所示: Oracle 12.1.0.2之前,CDB启动后,所有的PDB都处于加载状态(MOUNTED)。CDB启动时,没有默认机制自动启动PDB。只能通过在

    2024年02月07日
    浏览(60)
  • Spring Boot实现第一次启动时自动初始化数据库

    在现在的后端开发中,只要是运用联系型数据库,信任SSM架构(Spring Boot + MyBatis)已经成为首选。 不过在咱们第一次运转或许布置项目的时分,一般要先手动衔接数据库,履行一个SQL文件以创立数据库以及数据库表格完结 数据库的初始化作业 ,这样咱们的SSM应用程序才能够

    2024年02月03日
    浏览(55)
  • docker-compose mongo 启动mongo容器后如何执行脚本创建用户数据库问题

    系统版本: 环境变量:Linux下必须export声明两个环境变量,注意这个账户同时也是创建的数据库的连接用户密码 目录:/home/user/docker-compose.yml 镜像:mongo:6.0.10 容器名:mongobss 挂载卷:data/db数据目录 start.sh后创建用户和库的脚本 环境变量:定义初始的mongo root角色用户 privil

    2024年02月04日
    浏览(66)
  • Springboot使用ProcessBuilder创建系统进程执行shell命令备份数据库

    Springboot执行shell命令备份数据库。 主要就是使用ProcessBuilder创建系统进程,执行终端命令。

    2024年02月07日
    浏览(41)
  • 【SpringBoot笔记28】SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)

    这篇文章,主要介绍SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)。 目录 一、SpringBoot操作ES文档数据 1.1、创建文档 1.2、更新文档 1.3、删除文档

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包