SpringBoot 实现SQL脚本自动执行

article/2025/9/14 9:39:25

SpringBoot 实现配置SQL脚本自动执行

一. 背景

我们可能遇到过这种情况:

  • 在公网开发时, 新增数据表非常容易, 直接登录到对应服务器的mysql / 使用Navicat访问mysql服务器. 然后去执行sql语句或脚本即可
  • 在内网开发时, 由于都在一个网段, 所以操作也比较方便
  • 但是在公网开发, 部署到别的内网环境. 上面的问题就变得非常麻烦.
    由于内网环境处于安全考虑禁止外部设备接入.因此需要安装许多工具, 而且有的机器甚至禁用了远程连接(当然你也可以重新配置,但是后果自负). 而且由于各种原因. 负责部署的可能不是开发本人(实施或者是测试或运维人员). 而且每次部署的版本可能因为部署的地方部署的不同而不同, 因此到最后反而会因为SQL表的原因给开发自己徒增工作量.

因此我们需要考虑: Springboot 到底有没有自动执行SQL的功能?
答案是确定的, 而且解决方案不止一种


二. 使用方式

  1. 创建脚本
    在项目的resource 目录下新建一个sql目录, 用于存放建表语句
    然后在sql 目录下创建 xxx-schema.sql, xxx-data.sql 脚本. 需要注意区分每个后缀代表的含义:
    schema: 代表存放的是DDL(数据库定义语言): 对表结构的增删改在这里
    data: 代表存放的是DML(数据库操作语言): 对表中数据的操作在这里

    在这里插入图片描述

  2. 在Springboot配置文件中配置
    如果是 .properties, 则按如下配置

    # 需要加上这句,否则不会自动执行sql文件
    spring.datasource.initialization-mode=always
    # schema.sql中一般存放的是建表语句DDL
    spring.datasource.schema = classpath:/sql/xxx-schema.sql
    # data.sql中一般存放的是需要插入更新等sql语句DML
    spring.datasource.data =  classpath:/sql/xxx-data.sql
    # 遇到错误继续执行
    spring.datasource.continue-on-error=true
    

    如果是 .yml 则按如下配置

    spring:datasource:initialization-mode: alwaysschema:- classpath:/sql/xxx-schema.sqldata:- classpath:/sql/xxx-data.sqlcontinue-on-error: true
    
  3. 正常启动项目即可

ps: 特别注意 spring.datasource.data.continue-on-error: true 配置

因为在没有加上这个配置之前, 每次初始化都会执行一遍配置的SQL脚本内的SQL语句.
如果在第一次启动并建表成功后再次重启就会因项目在启动时执行SQL脚本并出现表已存在的错误导致项目启动失败
添加该属性之后, 则会忽略错误, 让项目初始化成功! 这样, 也符合我们想要在项目初始化的时候自动执行SQL脚本的思想


三. 其他工具介绍

Flyway : 数据库版本控制管理工具

如果想要对mysql 进行更加细致的管理(版本管理), 可以通过整合 Flyway 来完成数据库部署和增量升级

  • Flayway是一款数据库版本控制管理工具,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里;不仅支持Command Line和java api ,也支持Build构建工具和Spring boot,也可以在分布式环境下能够安全可靠安全地升级数据库,同时也支持失败恢复。
  • Flyway最核心的就是用于记录所有版本演化和状态的MetaData表,Flyway首次启动会创建默认名为SCHEMA_VERSION的元素局表。 表中保存了版本,描述,要执行的sql脚本等;
  • 具体介绍和使用方式可参照以下博客 博客一 博客二

LiquiBase: 数据库重构和迁移的开源工具

LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。

  • 支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
  • 支持多开发者的协作维护;
  • 日志文件支持多种格式,如XML, YAML, JSON, SQL等;
  • 支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。

具体介绍和使用方式可参照下面博客 博客一 博客二



http://chatgpt.dhexx.cn/article/ld8o1TMY.shtml

相关文章

flink-sql-client提交sql脚本文件

标题: flink-sql-client提交sql脚本文件 日期: 2021-10-22 22:11:34 标签: [flink,sql-client] 分类: flink 我们知道,sql-client.sh可以提供给我们一个sql交互界面,让我们没执行一个sql,就可以看到执行结果,也可以交互式查询表的…

如何在mysql中执行sql脚本文件

一、sql脚本文件 简介 xxxx.sql这种文件被称为sql脚本文件。sql脚本文件中编写了大量的sql语句。我们执行sql脚本文件的时候,该文件中所有的sql语句会全部执行!批量的执行SQL语句,可以使用sql脚本文件。 上面这个vip.sql就是sql脚本文件&am…

使用sql脚本创建数据库表

准备脚本语句: CREATE TABLE test (title varchar(100) DEFAULT NULL,author varchar(10) DEFAULT NULL,digest varchar(255) DEFAULT NULL,content text,content_source_url varchar(500) DEFAULT NULL,thumb_media_id varchar(255) DEFAULT NULL,need_open_comme…

PowerDesigner生成Sql脚本

点击工具栏上的“Database”,选择“Change Current DBMS”进行修改导出脚本类型,可以选择mysql、sql server/ oracle 、db2等主流的数据库。 在DBMS中点击下拉菜单,选择要导出的数据库脚本,对名字进行自定义,点击确定即…

PowerDesigner导入sql脚本

一个好的数据库建模,不但可以让人直观的理解模型,充分的利用数据库技术,优化数据库的设计,而且还可以让新员工快速的熟悉数据库表结构与业务之间的关系.无奈的是随着开发过程中,数据库表结构字段的增删以及关联关系的变动给数据库模型带来维护上的巨大工作量.现为了维护上的简单…

dbeaver导入sql脚本

新建数据库 执行脚本 选择脚本文件 选择mysql 然后按确定就行了

springboot + mybatis启动时执行sql脚本

目录 1. 创建数据版本表,结构如下: 2. 创建HdVersion对象 3. 创建执行sql的dao 4. 创建dao对应的xml 5.创建sql执行器,实现ApplicationRunner 6. 结语 背景:项目开发或发布阶段修改表结构,项目更新时需要手动执行脚…

SpringBoot启动自动执行sql脚本

在开发当中我们每次发布服务都需要手动执行脚本,然后重启服务,而SpringBoot有服务启动自动执行sql脚本的功能的,可以为我们省去手动执行脚本的这一步,只需要部署新的服务即可。 这个功能是SpringBoot自带的不需要引入额外的依赖&a…

Excel数据转化为sql脚本

在实际项目开发中,有时会遇到客户让我们把大量Excel数据导入数据库的情况。这时我们就可以通过将Excel数据转化为sql脚本来批量导入数据库。 1 在数据前插入一列单元格,用来拼写sql语句。 具体写法:"insert into t_student (id,name,ag…

MySQL导出sql脚本文件

⭐️前言⭐️ sql脚本文件在我们做项目时,特别是学习别人的开源项目时经常需要进行导入导出操作,才能在自己的系统上跑起来,这篇文章主要介绍如何导出sql脚本文件,具体操作如下,附带截图详解。 🍉博客主页…

dataGrip导出sql脚本

1.打开dataGrip。 2.选择要导出的数据库表。 3.点击右键->选择"Dump Data to File(s)", 同时选择,Skip Computed Columns(sql),Add Table Definition(sql),Overwrite Exsting Files和Single File。 4.点击sql Inserts 5.选择文件保存位置 6.生成sql脚…

linux下plsql怎么执行sql脚本,plsql怎么执行sql脚本

首先,我们需要登录需要执行sql文件的用户,在我们确保sql文件无误的情况下,进入plsqldeveloper: 1,找到tools---》import tables ---》选择sql insert,不要选中sqlplus,选择最下面的那个导入sql文件,选中好sql文件后,点击import就会执行sql语句,生成日志。 2,如果执行…

DBeaver执行SQL脚本文件

1、右键库名,点击工具-->执行脚本 2、在弹出窗口中选择输入文件,并修改Extra command args:--default-character-setutf8,防止中文乱码,点击开始按钮。 3、执行完成。

kettle执行SQL脚本

参考一下kettle官方文档 kettle什么时候需要创建临时表呢 SELECT * WHERE cid IN(xxx) 的数据太多,占了很大内存。 目标表有没有必要做逻辑删除,如果做逻辑删除,后期数据量增长过快。 目标表增量更新:1、sql直接插入&#xff1…

SQL Server SQL脚本

本节的主要内容是要教大家怎么通过编写 SQL 脚本来查询、更新并且运行数据库。 利用 SQL 脚本我们能做很多事情,比如插入数据、读取数据、更新数据以及删除数据等;它们也可以用于创建数据库对象,如表,视图,存储过程&a…

SQL Server 数据库之生成与执行 SQL 脚本

生成与执行 SQL 脚本 1. 将数据库生成2. 将数据表生成 SQL 脚本4. 执行 SQL 脚本 1. 将数据库生成 使用对象资源管理器能快速创建整个数据的脚本,也能使用默认选项创建单个数据库对象的脚本; 用户能在查询编辑器窗口中对文件或剪贴板创建脚本&#xff0…

SQL 常用脚本大全

1、行转列的用法PIVOT CREATE table test (id int,name nvarchar(20),quarter int,number int) insert into test values(1,N苹果,1,1000) insert into test values(1,N苹果,2,2000) insert into test values(1,N苹果,3,4000) insert into test values(1,N苹果,4,5000) insert …

打砖游戏,详解每一行代码,历经三个小时解析,初学可看

打转游戏详解版 网上只要搜一下“打砖游戏”,基本会看到很多一样的代码,主要是注释也很少,对于python不熟悉的人来说,根本看不懂,只会拿来运行着玩玩。 于是我历经三个小时,把代码几乎每一行都注释了一遍&…

今天开始敲代码

新手小白今天开始自学敲代码了呜呜呜 加油加油加油

开发12年,整整6百万行代码,史上最烂的开发项目长这样

程序员(ID:imkuqin)猿妹编译 原文:https://projectfailures.wordpress.com 最近有个史称世界上最烂的开发项目在朋友圈刷屏,这个项目到底有多烂呢? 这个项目拖了整整12年,造出6百万行代码&#…