代码之家  ›  专栏  ›  技术社区  ›  Steffen Harbich

Quartz和MySQL的自动架构创建失败,mysqlsyntaxException

  •  1
  • Steffen Harbich  · 技术社区  · 6 年前

    我有一个运行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_x表时失败。我试着找出我发现的原因 ScriptUtils Spring调用的类来执行Quartz脚本 tables_mysql_innodv.sql .故意抑制例外:

    com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxErrorException:您有一个 SQL语法错误;请查看与您的 mysql服务器版本,正确的语法使用near'drop table if 存在qrtz_paused_trigger_grps;drop table if exists qrtz_schedule'at 第9行

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

    已执行启动脚本的源可用 here .遇到异常 in this line .有一个观察让我困惑:同一方法中的代码试图拆分SQL语句,但只提取了2个语句-第一行 # 还有剩下的剧本。也许这就是实际问题。

    那么,我怎样才能解决这个问题呢?

    版本信息:

    • 弹簧套2.0.2.释放
    • MySQL:MySQL连接器Java:5.1.46
    • 组织石英调度:石英:2.3.0
    3 回复  |  直到 5 年前
        1
  •  4
  •   Mouad EL Fakir    5 年前

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

    spring.quartz.jdbc.comment-prefix=#
    
        2
  •  2
  •   Steffen Harbich    6 年前

    有一个解决方法:

    1. 复制 script file 表\u mysql \u innodb.sql 到资源文件夹 main/resources/org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql .这将由Spring引导而不是原始文件来获取。
    2. 删除文件开头的所有注释行。这些是Spring中用于解析的有问题的行 ScriptUtils 类。
        3
  •  1
  •   TexAmicoMio    5 年前

    在yaml配置属性文件中,正如mouad el fakir i建议的那样,添加了:

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