Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java quartz和mysql的自动架构创建因MySQLSyntaxException而失败_Java_Mysql_Spring_Spring Boot_Quartz Scheduler - Fatal编程技术网

Java quartz和mysql的自动架构创建因MySQLSyntaxException而失败

Java quartz和mysql的自动架构创建因MySQLSyntaxException而失败,java,mysql,spring,spring-boot,quartz-scheduler,Java,Mysql,Spring,Spring Boot,Quartz Scheduler,我有一个运行mysql数据库的SpringBoot2应用程序,希望添加Quartz调度程序。配置: spring.quartz.job-store-type=jdbc spring.quartz.jdbc.initialize-schema=always spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false 但在启动时,它不会创建数据库表,并且在访问QRTZ_*表时失败。我进行了调试,以获取我在Spring调用

我有一个运行mysql数据库的SpringBoot2应用程序,希望添加Quartz调度程序。配置:

spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
但在启动时,它不会创建数据库表,并且在访问QRTZ_*表时失败。我进行了调试,以获取我在Spring调用的
ScriptUtils
类中找到的原因,以执行quartz脚本
tables\u mysql\u innodv.sql
。故意抑制例外情况:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您有一个 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便在以下情况下使用正确的语法 存在QRTZ\u暂停\u触发\u GRP;如果存在QRTZ_计划,则删除表格 第9行

我看不到任何语法错误,当我在MySQL Workbench中直接执行相同的脚本时,它运行良好,即创建表等

执行的启动脚本的源可用。遇到异常。有一个观察结果让我感到困惑:同一方法中的代码试图拆分SQL语句,但只提取了两条语句——第一行
#
和剩余的脚本。也许这才是真正的问题

那么,我该如何解决这个问题呢?

版本信息:

  • 弹簧靴2.0.2.0版本
  • mysql:mysql连接器java:5.1.46
  • org.quartz调度程序:quartz:2.3.0
有一个解决办法:

  • 复制表\u mysql\u innodb.sql 转到您的资源文件夹main/resources/org/quartz/impl/jdbcjobstore/tables\u mysql\u innodb.sql。这将由spring boot而不是原始文件获取
  • 删除文件开头的所有注释行。这些是Spring的
    ScriptUtils
    类中解析的有问题的行

  • 将以下属性添加到配置中,以指定注释字符:

    spring.quartz.jdbc.comment-prefix=#
    

    在YAML配置属性文件中,正如Mouad EL Fakir I建议的那样,添加了:

       quartz:
          job-store-type: jdbc
          jdbc:
             initialize-schema: always
             comment-prefix: '#'
    

    “ScriptUtils.containsSqlScriptDelimiters”方法无法正确解析脚本。
    因为mysql脚本的注释包含一些单引号。您可以将单引号替换为空。

    似乎与有关。问题是SQL有一个分号,可以在CLI中分隔语句,但在JDBC中是不允许的。