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

And*_*rew 5 java mysql spring-boot

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

create table语句可以工作,但create procedure语句会抛出异常.导致异常的示例schema.sql文件语句如下所示:

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

BEGIN
  SELECT * from `database`.employees;
END;
Run Code Online (Sandbox Code Playgroud)

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

我查看了ScriptUtils类,并且无法找到;通过这些过程来转义字符的方法.使用\\\作为转义字符也不起作用,以及MySQL DELIMITER命令.

有没有人能够使用Spring Boot的schema.sql文件创建MySQL存储过程?如果是这样他们可以展示一个例子?

有关其他一些信息,以下Spring JIRA问题解决了相同的主题,但是使用了Not Not Fix标签关闭了.

And*_*rew 7

The answer turned out to be very simple. Spring Boot has a DataSource separator property that can be set in the application.properties file:

spring.datasource.separator=^;
Run Code Online (Sandbox Code Playgroud)

Then in the schema.sql file all ; statements not within the stored procedure need to be updated with the new separator.

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

BEGIN
  SELECT * from `database`.employees;
END ^;
Run Code Online (Sandbox Code Playgroud)