我将 Spring-boot 0.5.0.M6 与 Spring-Batch 一起使用。配置通过使用 @EnableBatchProcessing 和 application.properties 中配置的数据源等。
在应用程序首次运行期间,一切正常,但在我停止应用程序并重新启动应用程序后,出现以下错误
org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; Duplicate entry '1' for key 'PRIMARY'; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:659)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:908)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:969)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:974)
挖掘时,我在日志中观察到以下行
2013-12-06 12:12:37 INFO ResourceDatabasePopulator:162 - Executing SQL script from class path resource [org/springframework/batch/core/schema-mysql.sql]
2013-12-06 12:12:37 INFO ResourceDatabasePopulator:217 - Done executing SQL script from class path resource [org/springframework/batch/core/schema-mysql.sql] in 13 ms.
这里的根本问题是 schema-drop-mysql.sql 没有被触发 schema-mysql.sql 被触发,从而在 BATCH_JOB_SEQ 中创建了两个条目。
对于相同的解决方案,我添加了
@EnableAutoConfiguration(exclude={BatchAutoConfiguration.class})
但是由于这个原因,我需要显式执行 schema-mysql.sql,到目前为止还可以,但是当 spring-batch 版本将使用模式中的更新进行更新时会出现问题
因此有几个问题: 1. 如何自动配置批处理,甚至在 schema-mysql.sql 之前执行 schema-drop-mysql.sql?2. 有没有办法将此 BatchDatabaseInitializer 配置为运行一种“更新”模式?
问候