在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命令一样,使用和作为转义字符也不起作用。
\\
\
DELIMITER
有人能通过Spring Boot使用schema.sql文件创建MySQL存储过程吗?如果可以,他们可以举个例子吗?
有关一些其他信息,以下Spring JIRA问题解决了相同的主题,但已用 “不会修复” 标签关闭。
答案很简单。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 ^;