我有一个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;
因此在表已存在的情况下没有错误处理。