当前位置: 首页 > news >正文

springboot项目初始化执行sql

Sprint Boot应用可以在启动的时候自动执行项目根路径下的SQL脚本文件。我们需要先将sql脚本写好,并将这些静态资源都放置在src/main/resources文件夹下。

再配置application.yml:

spring.datasource.initialization-mode

      必须配置初始化模式initialization-mode,否则不生效。initialization-mode属性有always、embedded和never。

  • always表示Spring Boot应用启动时始终执行数据库初始化
  • embedded表示只初始化内存数据库,比如H2数据库
  • never表示从不执行初始化数据库

        需要注意的是,配置之后,每次启动都会执行一遍sql文件。但是我们一般都是要求只执行一次。所以我们需要在sql语句中,处理好如果已存在的处理方式。如建表语句中加入:if not exist 判断建表。

spring.datasource.platform

     spring.datasource.platform是数据库平台内容配置项,主要有mysql、postgresql、oracle等。

spring.datasource.schema

    spring.datasource.schema一般配置的是存放的是DDL脚本,即通常为创建或更新库表的脚本。该配置项时数组模式,所以可以配置多个:

application.xml:配置方式:

spring.datasource.schema[0]=classpath:sql/schema-${spring.datasource.platform:mysql}.sql
spring.datasource.schema[1]=classpath:sql/schema-${spring.datasource.platform:mysql}-1.sql

application.yml:配置方式:

spring:
  datasource:
    schema: classpath:sql/schema-${spring.datasource.platform:mysql}.sql, classpath:sql/schema-${spring.datasource.platform:mysql}-1.sql

spring:
  datasource:
    schema:
      - classpath:sql/schema-${spring.datasource.platform:mysql}.sql
      - classpath:sql/schema-${spring.datasource.platform:mysql}-1.sql

spring.datasource.data

spring.datasource.data中一般是DML脚本,即通常为数据插入脚本

该配置项时数组模式,所以可以配置多个:

application.xml:配置方式:

spring.datasource.data[0]=classpath:sql/data-${spring.datasource.platform:mysql}.sql
spring.datasource.data[1]=classpath:sql/data-${spring.datasource.platform:mysql}-1.sql

application.yml:配置方式:

spring:
  datasource:
    data: classpath:data_1.sql, classpath:data_2.sql

spring:
  datasource:
    data:
      - classpath:data_1.sql
      - classpath:data_2.sql

spring.datasource.separator

       spring.datasource.separator是配置sql的断句分割符的,默认是以';'作为断句的分隔符的。但是很多时候我们的sql语句中包含";"但是不是一整个sql语句,这时候使用”;“作为分隔符就会报错。

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xxxxxx' at line 1

例如我们有存储过程

-- 当存储过程`pro1`存在时,删除。
drop procedure if exists pro1;
-- 创建存储过程`p1`
create procedure pro1()
begindeclare row_num int;select count(*) into row_num from `t_user` where id = 'root';if row_num = 0 thenINSERT INTO `t_user`(`username`, `password`) VALUES ('root', '123456');end if;
end;
-- 调用存储过程`pro1`
call pro1();
drop procedure if exists pro1;

这时候就会报错。通过 spring.datasource.separator我们就可以将默认的断句分割符改为指定值。如:spring.datasource.separator=$$。

-- 当存储过程`pro1`存在时,删除。
drop procedure if exists pro1;$$
-- 创建存储过程`p1`
create procedure pro1()
begindeclare row_num int;select count(*) into row_num from `t_user` where username = 'root';if row_num = 0 thenINSERT INTO `t_user`(`username`, `password`) VALUES ('root', '123456');end if;
end;$$
-- 调用存储过程`pro1`
call pro1();$$
drop procedure if exists pro1;$$

 但是,由于pring.datasource.separator是全局的配置,一但将sql脚本的断句分隔符从';'变成'$$',所以需要在DDLDML语句的';'后加'$$',不然可能会出现将整个脚本当成一条sql语句来执行的情况。

相关文章:

springboot项目初始化执行sql

Sprint Boot应用可以在启动的时候自动执行项目根路径下的SQL脚本文件。我们需要先将sql脚本写好,并将这些静态资源都放置在src/main/resources文件夹下。 再配置application.yml: spring.datasource.initialization-mode 必须配置初始化模式initializa…...

Kubernetes之存储管理(中)

NFS网络存储 emptyDir和hostPath存储,都仅仅是把数据存储在pod所在的节点上,并没有同步到其他节点,如果pod出现问题,通过deployment会产生一个新的pod,如果新的pod不在之前的节点,则会出现问题&#xff0c…...

MySQL workbench的基本操作

1. 创建新的连接 hostname主机名输入“local host”和“127.0.0.1”效果是一样的,指的是本地的服务器。 需要注意的是,此处的密码在安装软件的时候已经设定。 点击【Test Connection】,测试连接是否成功。 创建完的连接可以通过&#xff0c…...

【Flink】FlinkSQL中Table和DataStream互转

在我们实际使用Flink的时候会面临很多复杂的需求,很可能需要FlinkSQL和DataStream互相转换的情况,这就需要我们熟练掌握Table和DataStream互转,本篇博客给出详细代码以及执行结果,可直接使用,通过例子可学会Table和DataStream互转,具体步骤如下: maven如下<?xml ver…...

网络总结知识点(网络工程师必备)一

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 目录 1.TCP UDP协议的区别 2.ARP是第几层协议,其作用...

离线安装samba与配置(.tar方式安装)

一、samba离线安装【安装并设置成功后&#xff0c;相关文件及其位置&#xff1a;①smbd&#xff1a;/usr/local/samba/sbin/smbd②nmdb&#xff1a;/usr/local/samba/sbin/nmbd③配置文件 smb.conf&#xff1a;/usr/local/samba/lib/smb.conf④添加用户的 smbpasswd 文件&#…...

[Java基础]—JDBC

前言 其实学Mybatis前就该学了&#xff0c;但是寻思目前主流框架都是用mybatis和mybatis-plus就没再去看&#xff0c;结果在代码审计中遇到了很多cms是使用jdbc的因此还是再学一下吧。 第一个JDBC程序 sql文件 INSERT INTO users(id, NAME, PASSWORD, email, birthday) VAL…...

基本面向对象编程-计算机基本功能实现_

《C/S项目实训》实验报告 实验名称&#xff1a; 基本面向对象编程-计算机基本功能实现_ 一、实验目的 通过综合实践项目&#xff0c;理解Java 程序设计是如何体现面向对象编程基本思想&#xff0c;掌握OOP方法&#xff0c;掌握事件触发、消息响应机制。进一步巩固面向对…...

C++面向对象之多态性

文章目录C面向对象之多态性1.静态多态2.动态多态3.多态的好处3.1使用方法4.纯虚函数5.虚析构与纯虚析构5.1问题5.2解决6.其他知识点7.代码8.测试结果8.1父类中无虚函数&#xff0c;父类的指针指向子类对象&#xff0c;将调用父类中的函数&#xff0c;无法调用子类中的重写函数&…...

Android性能优化系列篇:弱网优化

弱网优化1、Serializable原理通常我们使用Java的序列化与反序列化时&#xff0c;只需要将类实现Serializable接口即可&#xff0c;剩下的事情就交给了jdk。今天我们就来探究一下&#xff0c;Java序列化是怎么实现的&#xff0c;然后探讨一下几个常见的集合类&#xff0c;他们是…...

Mysql 插入大批量数据调优方法

Mysql 插入大批量数据调优方法[toc]1、多线程插入&#xff08;单表&#xff09;在数据里做插入操作的时候&#xff0c;整体时间的分配是这样的&#xff1a;链接耗时 &#xff08;30%&#xff09;发送query到服务器 &#xff08;20%&#xff09;解析query &#xff08;20%&#…...

matlab基础

系列文章目录 文章目录系列文章目录前言1 基本用法总结基础语法桌面管理矩阵均匀间隔矢量矩阵创建矩阵索引前言 介绍了matlab的基本用法 1 基本用法 >> save filename.mat % 将当前工作区的所有变量保存为mat文件 >> load filename.mat % 加载文件>> loa…...

自动化测试——多窗口切换和切换frame

这里写目录标题一、多窗口切换1、base.py&#xff1a;公共代码2、切换句柄的方式1&#xff0c;通过for循环3、切换句柄的方式2&#xff0c;通过索引切换4、源代码二、frame窗口1、什么是frame?2、Frame 分类3、判断要定位的元素在不在frame中两种方式方式一&#xff1a;鼠标选…...

C#中,Elasticsearch.Net判断空字符串

之前有个业务需求&#xff0c;由于最开始存储到es里的&#xff0c;是默认空字符串。 后面程序取数据时&#xff0c;发现需要取空字符串的数据时&#xff0c;不好取出来。 字符串的字段如图&#xff1a; 实际数据如图&#xff1a; 我用的是C#语言&#xff0c;使用的是Elastic…...

23种设计模式-适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;是一种常用的设计模式&#xff0c;它可以将不兼容的接口转换成可兼容的接口&#xff0c;使得原本不能一起工作的类可以协同工作。 在Java中&#xff0c;适配器模式一般有两种实现方式&#xff0c;即类适配器模式和对象适配器…...

深入理解this指向问题

this指向 在运行时绑定&#xff0c;所以this和函数的调用方式和调用的位置有关&#xff0c;和定义的位置没关系 绑定规则 默认绑定&#xff08;非严格模式下this指向全局变量&#xff0c;在严格模式下函数内的this指向undefined&#xff09; 独立函数调用&#xff0c;没有主题 …...

事业单位联考(综合应用A类)典型例题教案

【联考A类】根据材料2&#xff0c;请你概括C市B县旅游质监所投诉处理科小王在接待投诉时存在的主要问题&#xff0c;并指出问题的具体表现。&#xff08;35分&#xff09;要求&#xff1a;准确、全面、分条作答。字数在300字以内。材料2&#xff1a;某日&#xff0c;几位游客家…...

frp内网穿透实验

Frp (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用&#xff0c;它支持 TCP、UDP 协议&#xff0c; 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站&#xff0c; 帮你实现 公网 ←→ FRP(服务器) ←→ 内网…...

认识JavaScript中的防抖函数

&#x1f468; 作者简介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;前端领域创作者 ✒️ 个人主页&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;点赞&#x1f44d;&#x1f4dd; 评论 ⭐️收藏 文章目录前言一、防抖是什么&#xff1f;1. deounce-v1的基本…...

macOS 13.3 Beta 2 (22E5230e)With OpenCore 0.8.9正式版 and winPE双引导分区原版镜像

原文地址&#xff1a;http://www.imacosx.cn/112340.html&#xff0c;转载需注明出处镜像特点完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要…...

JetPack—DataStore核心原理与使用

简介 首先&#xff0c;DataStore是Jetpack一部分&#xff0c;是一种数据存储解决方案。其次&#xff0c;DataStore使用协程及flow以异步、一致的方式实现数据的存储。最后是DataStore的实现&#xff0c;分为Preferences DataStore和Proto DataStore&#xff1a;Preferences Da…...

热烈祝贺|酒事有鲤盛装亮相2023中国(山东)精酿啤酒产业发展创新论坛暨展览会

酒事有鲤&#xff08;济南&#xff09;品牌管理有限公司是一家致力于将世界顶级精酿啤酒技术和理念与“ 在地”文化有机融合&#xff0c;做世界认 可的多元化好啤酒&#xff0c;通过精致 舒适的家门口酒馆&#xff0c;让啤酒的 世界观更为完整。 中国生物发酵产业协会联合齐鲁…...

深度强化学习DLR

1 强化学习基础知识 强化学习过程&#xff1a;⾸先环境(Env)会给智能体(Agent)⼀个状态(State)&#xff0c;智能体接收到环境给的观测值之后会做出⼀个动作(Action)&#xff0c;环境接收到智能体给的动作之后会做出⼀系列的反应&#xff0c;例如对这个动作给予⼀个奖励(Reward…...

Android Handler机制(四) Message源码分析

一. 简介 接上一篇文章:Android Handler机制(三) Looper源码分析 ,我们来继续分析一下Message源码 这一系列文章都是为了深入理解Handler机制. Message 作为消息传递的载体&#xff0c;源码主要分为以下 几个部分: 1. 操作数据相关&#xff0c;类似 getter()和 setter()这种…...

【Git】git命令(全)

Git1、本地操作2、版本管理3、远端仓库4、分支管理5、缓存stash6、遗留rebase7、标签管理8、解决冲突9、参考教程10、示例代码1、本地操作 Linux安装git&#xff1a;yum install git查看git版本 git version查看git设置 git config --list设置git属性 git config --global初始…...

软考论文-成本管理(1)

成本管理 1.成本管理的主要内容&#xff1f; 规划成本&#xff1a;制定一个成本管理的计划。估算成本&#xff1a;根据项目范围说明书&#xff0c;项目管理计划和wbs等文档&#xff0c;采用xxx方法进行估算成本成本预算&#xff1a;可以算工作包的费用&#xff0c;制定预算和…...

Java 多线程 --- 锁的概念和类型划分

Java 多线程 --- 锁的概念和类型划分锁的概念乐观锁与悲观锁公平锁与非公平锁什么是可重入锁独占锁与共享锁轻量级锁和重量级锁自旋锁 (Spinlock)锁的概念 锁可以将多个线程对共享数据的并发访问转换为串行访问, 这样一个共享数据一次只能被一个线程访问, 该线程访问结束后其他…...

python程序员狂飙上头——京海市大嫂单推人做个日历不过分吧?

嗨害大家好鸭&#xff01;我是小熊猫~ 这个反黑剧其实火了很久了&#xff0c; 但是我现在才有空开始看 该说不说&#xff0c;真的很上头&#xff01;&#xff01;&#xff01; 大嫂简直就像是干枯沙漠里的玫瑰 让人眼前一亮哇~~ 我小熊猫此时此刻就成为大嫂的单推人&…...

浅谈子网掩码、IP地址、网络地址之间关系

文章目录一、什么是子网掩码二、给定IP地址&#xff0c;如何求网络地址网络标识&#xff08;net-id&#xff09;和主机标识&#xff08;host-id&#xff09;计算步骤三、CIDR地址表示方法(Classless Inter Domain Routing)四、IP地址与MAC地址一、什么是子网掩码 在TCP/IP协议…...

前端优化的解决方案

能缓存的&#xff0c;尽量强缓存。减少HTTP请求数 使用外部引入的css和js文件&#xff0c;并且引入的css和js越少越好使用雪碧图&#xff08;精灵图&#xff09;img计算缩放也需要时间&#xff0c;使用base64编码将较小图片嵌入到样式表中&#xff0c;减少请求数因为iframe会阻…...

免费网站app下载/淘宝流量网站

*) RequestMapping(value"/xxx/{id}",method{RequestMethod.GET}) method 不写的话&#xff0c;默认GET、POST都支持&#xff0c;根据前端方式自动适应 转载于:https://www.cnblogs.com/mySummer/p/11057147.html...

做企业网站需要的人/软文代写费用

1.id: 代表select 语句的编号, 如果是连接查询,表之间是平等关系, select 编号都是1,从1开始. 如果某select中有子查询,则编号递增.如下一条语句2个结果 mysql> explain select goods_id,goods_name from goods where goods_id in (sele ct goods_id from goods where ca…...

室内设计师前景怎么样/seo排名工具外包

在本地调试运行spark程序时,报错Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/spark/SparkConf,这个错误就是程序在运行时找不到类 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/SparkConfat cn.jin…...

赣榆县建设局网站/顺德搜索seo网络推广

前言 alpine 提供了非常好用的apk软件包管理工具&#xff0c;通过apk –help命令查看完整的包管理命令。更新索引 update&#xff1a;从远程镜像源中更新本地镜像源索引&#xff0c;update命令会从各个镜像源列表下载APKINDEX.tar.gz并存储到本地缓存&#xff0c;一般在/var/ca…...

河南省交通基本建设质量检测监督站网站/付费推广方式有哪些

css实现固定背景图像的方法发布时间&#xff1a;2020-08-29 11:26:59来源&#xff1a;亿速云阅读&#xff1a;81作者&#xff1a;小新小编给大家分享一下css实现固定背景图像的方法&#xff0c;相信大部分人都还不怎么了解&#xff0c;因此分享这篇文章给大家参考一下&#xff…...

网站设置了字体为黑体怎么改字体/怎么seo网站排名

近日&#xff0c;清华学姐指控学弟性骚扰事件&#xff0c;已经引起了全网的关注&#xff0c;事件已经持续多天&#xff0c;热度依然不减。而清华学姐的个人资料也随之曝光&#xff0c;还由此催生了一个网络热词儿——清华腚姐。清华腚姐是什么意思梗清华腚姐是指清华学姐事件&a…...