Spring批处理元数据表已存在异常

时间:2018-04-12 14:36:32

标签: spring spring-batch

我有一个Spring批处理应用程序写入MySql数据库。在第一次运行时,一切都按预期运行,写入成功。但是,在后续运行中重新启动服务后,会出现以下异常:Table 'BATCH_JOB_INSTANCE' already exists。对于Spring尝试创建的每个元数据表都会出现此异常,并且不会发生对实际“业务逻辑”数据库的写入。

完整日志:

INFO org.springframework.jdbc.datasource.init.ScriptUtils - Executing SQL script from class path resource [org/springframework/batch/core/schema-mysql.sql]
DEBUG org.springframework.jdbc.datasource.init.ScriptUtils - Failed to execute SQL script statement #1 of class path resource [org/springframework/batch/core/schema-mysql.sql]: CREATE TABLE BATCH_JOB_INSTANCE ( JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY , VERSION BIGINT , JOB_NAME VARCHAR(100) NOT NULL, JOB_KEY VARCHAR(32) NOT NULL, constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) ) ENGINE=InnoDB
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'BATCH_JOB_INSTANCE' already exists

是否有任何Spring Batch配置/注释我可以设置告诉Spring写入现有数据库而不是仅仅在数据库已经存在时退出并引发异常?

org/springframework/batch/core/schema-mysql.sql文件如下所示:

-- Autogenerated: do not edit this file

CREATE TABLE BATCH_JOB_INSTANCE  (
    JOB_INSTANCE_ID BIGINT  NOT NULL PRIMARY KEY ,
    VERSION BIGINT ,
    JOB_NAME VARCHAR(100) NOT NULL,
    JOB_KEY VARCHAR(32) NOT NULL,
    constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY)
) ENGINE=InnoDB;

因此在表已存在的情况下没有错误处理。

0 个答案:

没有答案