小编典典

带存储过程的Spring Boot MySQL数据库初始化错误

spring-boot

在Spring Boot应用程序中,我尝试按照文档中的建议,通过将schema.sql文件放在我的资源目录中,来在运行集成测试之前初始化一些MySQL数据库表和存储过程。

创建表语句可以工作,但是创建过程语句会引发异常。导致异常的示例schema.sql文件语句如下所示:

DROP PROCEDURE IF EXISTS `database`.FOO;
CREATE PROCEDURE `database`.FOO()

BEGIN
  SELECT * from `database`.employees;
END;

问题是;存储过程中的字符由Spring ScriptUtils类解析,该类在执行schema.sql文件之前先对其进行解析,然后导致MySQL在脚本上引发语法错误。

我已经看过ScriptUtils类,还没有找到一种方法来转义;字符。\\\MySQL
DELIMITER命令一样,使用和作为转义字符也不起作用。

有人能通过Spring Boot使用schema.sql文件创建MySQL存储过程吗?如果可以,他们可以举个例子吗?

有关一些其他信息,以下Spring
JIRA问题
解决了相同的主题,但已用 “不会修复” 标签关闭。


阅读 437

收藏
2020-05-30

共1个答案

小编典典

答案很简单。Spring Boot具有DataSource分隔符属性,可以在application.properties文件中进行设置:

spring.datasource.separator=^;

然后,需要在schema.sql文件中;使用新的分隔符更新存储过程之外的所有语句。

DROP PROCEDURE IF EXISTS `database`.FOO;
CREATE PROCEDURE `database`.FOO()

BEGIN
  SELECT * from `database`.employees;
END ^;
2020-05-30