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标签关闭了.
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)
| 归档时间: |
|
| 查看次数: |
1526 次 |
| 最近记录: |