diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java b/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java index 6ea7515d7..aa4c21ddb 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java @@ -30,10 +30,12 @@ public class StepContribution { private int commitCount; - private int skipCount; - private int readSkipCount; + private int writeSkipCount; + + private int uncommitedReadSkipCount; + /** * @param execution */ @@ -78,7 +80,7 @@ public class StepContribution { * skips. */ public int getStepSkipCount() { - return readSkipCount + skipCount + parentSkipCount; + return uncommitedReadSkipCount + readSkipCount + writeSkipCount + parentSkipCount; } /** @@ -87,23 +89,30 @@ public class StepContribution { * parent {@link StepExecution}. */ public int getSkipCount() { - return skipCount; + return readSkipCount + writeSkipCount; } /** - * Increment the total skip count for this contribution + * Increment the read skip count for this contribution */ - public void incrementSkipCount() { - skipCount++; - } - - /** - * Increment the counter for skipped reads - */ - public void incrementReadSkipCount() { + public void incrementReadsSkipCount() { readSkipCount++; } + /** + * Increment the write skip count for this contribution + */ + public void incrementWriteSkipCount() { + writeSkipCount++; + } + + /** + * Increment the counter for temporary skipped reads + */ + public void incrementTemporaryReadSkipCount() { + uncommitedReadSkipCount++; + } + /** * @return the read skip count */ @@ -112,11 +121,19 @@ public class StepContribution { } /** - * Combine the skip counts and reset read skips to zero. + * @return the write skip count + */ + public int getWriteSkipCount() { + return writeSkipCount; + } + + /** + * Add the temporary read skip count to read skip count and reset the + * temporary counter. */ public void combineSkipCounts() { - skipCount += readSkipCount; - readSkipCount = 0; + readSkipCount += uncommitedReadSkipCount; + uncommitedReadSkipCount = 0; } /* @@ -124,8 +141,8 @@ public class StepContribution { * @see java.lang.Object#toString() */ public String toString() { - return "[StepContribution: items=" + itemCount + ", commits=" + commitCount + ", readSkips=" + readSkipCount - + ", skips=" + skipCount + "]"; + return "[StepContribution: items=" + itemCount + ", commits=" + commitCount + ", uncommitedReadSkips=" + + uncommitedReadSkipCount + ", readSkips=" + readSkipCount + "writeSkips=" + writeSkipCount + "]"; } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java b/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java index 8a923951b..b11e5eb26 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java @@ -47,7 +47,9 @@ public class StepExecution extends Entity { private int rollbackCount = 0; - private int skipCount = 0; + private int readSkipCount = 0; + + private int writeSkipCount = 0; private Date startTime = new Date(System.currentTimeMillis()); @@ -301,8 +303,10 @@ public class StepExecution extends Entity { public synchronized void apply(StepContribution contribution) { itemCount += contribution.getItemCount(); commitCount += contribution.getCommitCount(); + contribution.combineSkipCounts(); - skipCount += contribution.getSkipCount(); + readSkipCount += contribution.getReadSkipCount(); + writeSkipCount += contribution.getWriteSkipCount(); } /** @@ -328,11 +332,15 @@ public class StepExecution extends Entity { } public int getSkipCount() { - return skipCount; + return readSkipCount + writeSkipCount; } - public void incrementSkipCountBy(int count) { - skipCount += count; + public void incrementReadSkipCountBy(int count) { + readSkipCount += count; + } + + public void incrementWriteSkipCountBy(int count) { + writeSkipCount += count; } /** @@ -348,4 +356,20 @@ public class StepExecution extends Entity { return jobExecution.getJobInstance().getJobParameters(); } + public int getReadSkipCount() { + return readSkipCount; + } + + public int getWriteSkipCount() { + return writeSkipCount; + } + + public void setReadSkipCount(int readSkipCount) { + this.readSkipCount = readSkipCount; + } + + public void setWriteSkipCount(int writeSkipCount) { + this.writeSkipCount = writeSkipCount; + } + } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java index c15bc902d..151f0ecc1 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcStepExecutionDao.java @@ -62,18 +62,18 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement + " KEY_NAME, STRING_VAL, DOUBLE_VAL, LONG_VAL, OBJECT_VAL) values(?,?,?,?,?,?,?)"; private static final String SAVE_STEP_EXECUTION = "INSERT into %PREFIX%STEP_EXECUTION(STEP_EXECUTION_ID, VERSION, STEP_NAME, JOB_EXECUTION_ID, START_TIME, " - + "END_TIME, STATUS, COMMIT_COUNT, ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE) " - + "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + "END_TIME, STATUS, COMMIT_COUNT, ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT) " + + "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; private static final String UPDATE_STEP_EXECUTION_CONTEXT = "UPDATE %PREFIX%STEP_EXECUTION_CONTEXT set " + "TYPE_CD = ?, STRING_VAL = ?, DOUBLE_VAL = ?, LONG_VAL = ?, OBJECT_VAL = ? where STEP_EXECUTION_ID = ? and KEY_NAME = ?"; private static final String UPDATE_STEP_EXECUTION = "UPDATE %PREFIX%STEP_EXECUTION set START_TIME = ?, END_TIME = ?, " + "STATUS = ?, COMMIT_COUNT = ?, ITEM_COUNT = ?, CONTINUABLE = ? , EXIT_CODE = ?, " - + "EXIT_MESSAGE = ?, VERSION = ? where STEP_EXECUTION_ID = ? and VERSION = ?"; + + "EXIT_MESSAGE = ?, VERSION = ?, READ_SKIP_COUNT = ?, WRITE_SKIP_COUNT = ? where STEP_EXECUTION_ID = ? and VERSION = ?"; private static final String GET_STEP_EXECUTION = "SELECT STEP_EXECUTION_ID, STEP_NAME, START_TIME, END_TIME, STATUS, COMMIT_COUNT," - + " ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE from %PREFIX%STEP_EXECUTION where STEP_NAME = ? and JOB_EXECUTION_ID = ?"; + + " ITEM_COUNT, CONTINUABLE, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT from %PREFIX%STEP_EXECUTION where STEP_NAME = ? and JOB_EXECUTION_ID = ?"; private static final String CURRENT_VERSION_STEP_EXECUTION = "SELECT VERSION FROM %PREFIX%STEP_EXECUTION WHERE STEP_EXECUTION_ID=?"; @@ -185,13 +185,14 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement stepExecution.getStepName(), stepExecution.getJobExecutionId(), stepExecution.getStartTime(), stepExecution.getEndTime(), stepExecution.getStatus().toString(), stepExecution.getCommitCount(), stepExecution.getItemCount(), stepExecution.getExitStatus().isContinuable() ? "Y" : "N", - stepExecution.getExitStatus().getExitCode(), stepExecution.getExitStatus().getExitDescription() }; + stepExecution.getExitStatus().getExitCode(), stepExecution.getExitStatus().getExitDescription(), + Integer.valueOf(stepExecution.getReadSkipCount()), Integer.valueOf(stepExecution.getWriteSkipCount()) }; getJdbcTemplate().update( getQuery(SAVE_STEP_EXECUTION), parameters, new int[] { Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.INTEGER, Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.CHAR, Types.VARCHAR, - Types.VARCHAR }); + Types.VARCHAR, Types.INTEGER, Types.INTEGER }); } /** @@ -319,13 +320,16 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement Object[] parameters = new Object[] { stepExecution.getStartTime(), stepExecution.getEndTime(), stepExecution.getStatus().toString(), stepExecution.getCommitCount(), stepExecution.getItemCount(), stepExecution.getExitStatus().isContinuable() ? "Y" : "N", - stepExecution.getExitStatus().getExitCode(), exitDescription, version, stepExecution.getId(), + stepExecution.getExitStatus().getExitCode(), exitDescription, version, + Integer.valueOf(stepExecution.getReadSkipCount()), + Integer.valueOf(stepExecution.getWriteSkipCount()), stepExecution.getId(), stepExecution.getVersion() }; int count = getJdbcTemplate().update( getQuery(UPDATE_STEP_EXECUTION), parameters, new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.INTEGER, Types.INTEGER, - Types.CHAR, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER }); + Types.CHAR, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER, + Types.INTEGER, Types.INTEGER }); // Avoid concurrent modifications... if (count == 0) { @@ -362,6 +366,8 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement stepExecution.setItemCount(rs.getInt(7)); stepExecution.setExitStatus(new ExitStatus("Y".equals(rs.getString(8)), rs.getString(9), rs.getString(10))); stepExecution.setExecutionContext(findExecutionContext(stepExecution)); + stepExecution.setReadSkipCount(rs.getInt(11)); + stepExecution.setWriteSkipCount(rs.getInt(12)); return stepExecution; } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java index 3d9312b57..0f5e7591c 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemOrientedStep.java @@ -339,7 +339,8 @@ public class ItemOrientedStep extends AbstractStep { private void processRollback(final StepExecution stepExecution, final StepContribution contribution, final ExceptionHolder fatalException, TransactionStatus transaction) { - stepExecution.incrementSkipCountBy(contribution.getSkipCount()); + stepExecution.incrementReadSkipCountBy(contribution.getReadSkipCount()); + stepExecution.incrementWriteSkipCountBy(contribution.getWriteSkipCount()); /* * Any exception thrown within the transaction should automatically * cause the transaction to rollback. diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandler.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandler.java index 1e7833a49..b4370e7ee 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandler.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandler.java @@ -183,7 +183,7 @@ public class ItemSkipPolicyItemHandler extends SimpleItemHandler { try { if (itemSkipPolicy.shouldSkip(e, contribution.getStepSkipCount())) { // increment skip count and try again - contribution.incrementReadSkipCount(); + contribution.incrementTemporaryReadSkipCount(); if (listener != null) { listener.onSkipInRead(e); } @@ -233,7 +233,7 @@ public class ItemSkipPolicyItemHandler extends SimpleItemHandler { } catch (Exception e) { if (itemSkipPolicy.shouldSkip(e, contribution.getStepSkipCount())) { - contribution.incrementSkipCount(); + contribution.incrementWriteSkipCount(); // don't call the listener here - the transaction is going to // roll back addSkippedException(key, e); diff --git a/spring-batch-core/src/main/resources/schema-db2.sql b/spring-batch-core/src/main/resources/schema-db2.sql index 8dece8d1e..bd7acd04f 100644 --- a/spring-batch-core/src/main/resources/schema-db2.sql +++ b/spring-batch-core/src/main/resources/schema-db2.sql @@ -9,70 +9,72 @@ DROP SEQUENCE BATCH_STEP_EXECUTION_SEQ ; DROP SEQUENCE BATCH_JOB_EXECUTION_SEQ ; DROP SEQUENCE BATCH_JOB_SEQ ; --- Autogenerated: do not edit this file -CREATE TABLE BATCH_JOB_INSTANCE ( - JOB_INSTANCE_ID BIGINT PRIMARY KEY , - VERSION BIGINT, - JOB_NAME VARCHAR(100) NOT NULL , - JOB_KEY VARCHAR(2500) -) ; - -CREATE TABLE BATCH_JOB_EXECUTION ( - JOB_EXECUTION_ID BIGINT PRIMARY KEY , - VERSION BIGINT, - JOB_INSTANCE_ID BIGINT NOT NULL, - START_TIME TIMESTAMP DEFAULT NULL, - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_JOB_PARAMS ( - JOB_INSTANCE_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION, - constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION ( - STEP_EXECUTION_ID BIGINT PRIMARY KEY , - VERSION BIGINT NOT NULL, - STEP_NAME VARCHAR(100) NOT NULL, - JOB_EXECUTION_ID BIGINT NOT NULL, - START_TIME TIMESTAMP NOT NULL , - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - COMMIT_COUNT BIGINT , - ITEM_COUNT BIGINT , - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) - references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( - STEP_EXECUTION_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(1000) NOT NULL , - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL , - LONG_VAL VARCHAR(10) , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BLOB, - constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) - references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) -) ; - +-- Autogenerated: do not edit this file +CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_NAME VARCHAR(100) NOT NULL , + JOB_KEY VARCHAR(2500) +) ; + +CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_INSTANCE_ID BIGINT NOT NULL, + START_TIME TIMESTAMP DEFAULT NULL, + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_JOB_PARAMS ( + JOB_INSTANCE_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(100) NOT NULL , + STRING_VAL VARCHAR(250) , + DATE_VAL TIMESTAMP DEFAULT NULL, + LONG_VAL BIGINT , + DOUBLE_VAL DOUBLE PRECISION, + constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + START_TIME TIMESTAMP NOT NULL , + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + COMMIT_COUNT BIGINT , + ITEM_COUNT BIGINT , + READ_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , + DATE_VAL TIMESTAMP DEFAULT NULL , + LONG_VAL VARCHAR(10) , + DOUBLE_VAL DOUBLE PRECISION , + OBJECT_VAL BLOB, + constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) ; + CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ; CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ; CREATE SEQUENCE BATCH_JOB_SEQ; diff --git a/spring-batch-core/src/main/resources/schema-derby.sql b/spring-batch-core/src/main/resources/schema-derby.sql index d26a2cef8..b704eef6d 100644 --- a/spring-batch-core/src/main/resources/schema-derby.sql +++ b/spring-batch-core/src/main/resources/schema-derby.sql @@ -9,70 +9,72 @@ DROP TABLE BATCH_STEP_EXECUTION_SEQ ; DROP TABLE BATCH_JOB_EXECUTION_SEQ ; DROP TABLE BATCH_JOB_SEQ ; --- Autogenerated: do not edit this file -CREATE TABLE BATCH_JOB_INSTANCE ( - JOB_INSTANCE_ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, - VERSION BIGINT, - JOB_NAME VARCHAR(100) NOT NULL , - JOB_KEY VARCHAR(2500) -) ; - -CREATE TABLE BATCH_JOB_EXECUTION ( - JOB_EXECUTION_ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, - VERSION BIGINT, - JOB_INSTANCE_ID BIGINT NOT NULL, - START_TIME TIMESTAMP DEFAULT NULL, - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_JOB_PARAMS ( - JOB_INSTANCE_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION, - constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION ( - STEP_EXECUTION_ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, - VERSION BIGINT NOT NULL, - STEP_NAME VARCHAR(100) NOT NULL, - JOB_EXECUTION_ID BIGINT NOT NULL, - START_TIME TIMESTAMP NOT NULL , - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - COMMIT_COUNT BIGINT , - ITEM_COUNT BIGINT , - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) - references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( - STEP_EXECUTION_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(1000) NOT NULL , - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL , - LONG_VAL VARCHAR(10) , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BLOB, - constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) - references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) -) ; - +-- Autogenerated: do not edit this file +CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + VERSION BIGINT, + JOB_NAME VARCHAR(100) NOT NULL , + JOB_KEY VARCHAR(2500) +) ; + +CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + VERSION BIGINT, + JOB_INSTANCE_ID BIGINT NOT NULL, + START_TIME TIMESTAMP DEFAULT NULL, + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_JOB_PARAMS ( + JOB_INSTANCE_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(100) NOT NULL , + STRING_VAL VARCHAR(250) , + DATE_VAL TIMESTAMP DEFAULT NULL, + LONG_VAL BIGINT , + DOUBLE_VAL DOUBLE PRECISION, + constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + START_TIME TIMESTAMP NOT NULL , + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + COMMIT_COUNT BIGINT , + ITEM_COUNT BIGINT , + READ_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , + DATE_VAL TIMESTAMP DEFAULT NULL , + LONG_VAL VARCHAR(10) , + DOUBLE_VAL DOUBLE PRECISION , + OBJECT_VAL BLOB, + constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) ; + CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1)); CREATE TABLE BATCH_JOB_EXECUTION_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1)); CREATE TABLE BATCH_JOB_SEQ (ID BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, DUMMY VARCHAR(1)); diff --git a/spring-batch-core/src/main/resources/schema-hsqldb.sql b/spring-batch-core/src/main/resources/schema-hsqldb.sql index b4902f8dd..00ebe2615 100644 --- a/spring-batch-core/src/main/resources/schema-hsqldb.sql +++ b/spring-batch-core/src/main/resources/schema-hsqldb.sql @@ -9,70 +9,72 @@ DROP TABLE BATCH_STEP_EXECUTION_SEQ IF EXISTS; DROP TABLE BATCH_JOB_EXECUTION_SEQ IF EXISTS; DROP TABLE BATCH_JOB_SEQ IF EXISTS; --- Autogenerated: do not edit this file -CREATE TABLE BATCH_JOB_INSTANCE ( - JOB_INSTANCE_ID BIGINT IDENTITY PRIMARY KEY , - VERSION BIGINT, - JOB_NAME VARCHAR(100) NOT NULL , - JOB_KEY VARCHAR(2500) -) ; - -CREATE TABLE BATCH_JOB_EXECUTION ( - JOB_EXECUTION_ID BIGINT IDENTITY PRIMARY KEY , - VERSION BIGINT, - JOB_INSTANCE_ID BIGINT NOT NULL, - START_TIME TIMESTAMP DEFAULT NULL, - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_JOB_PARAMS ( - JOB_INSTANCE_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION, - constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION ( - STEP_EXECUTION_ID BIGINT IDENTITY PRIMARY KEY , - VERSION BIGINT NOT NULL, - STEP_NAME VARCHAR(100) NOT NULL, - JOB_EXECUTION_ID BIGINT NOT NULL, - START_TIME TIMESTAMP NOT NULL , - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - COMMIT_COUNT BIGINT , - ITEM_COUNT BIGINT , - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) - references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( - STEP_EXECUTION_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(1000) NOT NULL , - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL , - LONG_VAL VARCHAR(10) , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL LONGVARBINARY, - constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) - references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) -) ; - +-- Autogenerated: do not edit this file +CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT IDENTITY PRIMARY KEY , + VERSION BIGINT, + JOB_NAME VARCHAR(100) NOT NULL , + JOB_KEY VARCHAR(2500) +) ; + +CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT IDENTITY PRIMARY KEY , + VERSION BIGINT, + JOB_INSTANCE_ID BIGINT NOT NULL, + START_TIME TIMESTAMP DEFAULT NULL, + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_JOB_PARAMS ( + JOB_INSTANCE_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(100) NOT NULL , + STRING_VAL VARCHAR(250) , + DATE_VAL TIMESTAMP DEFAULT NULL, + LONG_VAL BIGINT , + DOUBLE_VAL DOUBLE PRECISION, + constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT IDENTITY PRIMARY KEY , + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + START_TIME TIMESTAMP NOT NULL , + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + COMMIT_COUNT BIGINT , + ITEM_COUNT BIGINT , + READ_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , + DATE_VAL TIMESTAMP DEFAULT NULL , + LONG_VAL VARCHAR(10) , + DOUBLE_VAL DOUBLE PRECISION , + OBJECT_VAL LONGVARBINARY, + constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) ; + CREATE TABLE BATCH_STEP_EXECUTION_SEQ ( ID BIGINT IDENTITY ); diff --git a/spring-batch-core/src/main/resources/schema-mysql.sql b/spring-batch-core/src/main/resources/schema-mysql.sql index 426bef64c..abfea731d 100644 --- a/spring-batch-core/src/main/resources/schema-mysql.sql +++ b/spring-batch-core/src/main/resources/schema-mysql.sql @@ -9,70 +9,72 @@ DROP TABLE IF EXISTS BATCH_STEP_EXECUTION_SEQ ; DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_SEQ ; DROP TABLE IF EXISTS BATCH_JOB_SEQ ; --- Autogenerated: do not edit this file -CREATE TABLE BATCH_JOB_INSTANCE ( - JOB_INSTANCE_ID BIGINT PRIMARY KEY , - VERSION BIGINT, - JOB_NAME VARCHAR(100) NOT NULL , - JOB_KEY VARCHAR(2500) -) type=InnoDB; - -CREATE TABLE BATCH_JOB_EXECUTION ( - JOB_EXECUTION_ID BIGINT PRIMARY KEY , - VERSION BIGINT, - JOB_INSTANCE_ID BIGINT NOT NULL, - START_TIME DATETIME DEFAULT NULL, - END_TIME DATETIME DEFAULT NULL, - STATUS VARCHAR(10), - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) type=InnoDB; - -CREATE TABLE BATCH_JOB_PARAMS ( - JOB_INSTANCE_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , - DATE_VAL DATETIME DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION, - constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) type=InnoDB; - -CREATE TABLE BATCH_STEP_EXECUTION ( - STEP_EXECUTION_ID BIGINT PRIMARY KEY , - VERSION BIGINT NOT NULL, - STEP_NAME VARCHAR(100) NOT NULL, - JOB_EXECUTION_ID BIGINT NOT NULL, - START_TIME DATETIME NOT NULL , - END_TIME DATETIME DEFAULT NULL, - STATUS VARCHAR(10), - COMMIT_COUNT BIGINT , - ITEM_COUNT BIGINT , - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) - references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) -) type=InnoDB; - -CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( - STEP_EXECUTION_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(1000) NOT NULL , - STRING_VAL VARCHAR(1000) , - DATE_VAL DATETIME DEFAULT NULL , - LONG_VAL VARCHAR(10) , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BLOB, - constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) - references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) -) type=InnoDB; - +-- Autogenerated: do not edit this file +CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_NAME VARCHAR(100) NOT NULL , + JOB_KEY VARCHAR(2500) +) type=InnoDB; + +CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_INSTANCE_ID BIGINT NOT NULL, + START_TIME DATETIME DEFAULT NULL, + END_TIME DATETIME DEFAULT NULL, + STATUS VARCHAR(10), + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) type=InnoDB; + +CREATE TABLE BATCH_JOB_PARAMS ( + JOB_INSTANCE_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(100) NOT NULL , + STRING_VAL VARCHAR(250) , + DATE_VAL DATETIME DEFAULT NULL, + LONG_VAL BIGINT , + DOUBLE_VAL DOUBLE PRECISION, + constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) type=InnoDB; + +CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + START_TIME DATETIME NOT NULL , + END_TIME DATETIME DEFAULT NULL, + STATUS VARCHAR(10), + COMMIT_COUNT BIGINT , + ITEM_COUNT BIGINT , + READ_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) type=InnoDB; + +CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , + DATE_VAL DATETIME DEFAULT NULL , + LONG_VAL VARCHAR(10) , + DOUBLE_VAL DOUBLE PRECISION , + OBJECT_VAL BLOB, + constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) type=InnoDB; + CREATE TABLE BATCH_STEP_EXECUTION_SEQ (ID BIGINT NOT NULL) type=MYISAM; INSERT INTO BATCH_STEP_EXECUTION_SEQ values(0); CREATE TABLE BATCH_JOB_EXECUTION_SEQ (ID BIGINT NOT NULL) type=MYISAM; diff --git a/spring-batch-core/src/main/resources/schema-oracle10g.sql b/spring-batch-core/src/main/resources/schema-oracle10g.sql index 365a8a987..9dfbb95dc 100644 --- a/spring-batch-core/src/main/resources/schema-oracle10g.sql +++ b/spring-batch-core/src/main/resources/schema-oracle10g.sql @@ -9,70 +9,72 @@ DROP SEQUENCE BATCH_STEP_EXECUTION_SEQ ; DROP SEQUENCE BATCH_JOB_EXECUTION_SEQ ; DROP SEQUENCE BATCH_JOB_SEQ ; --- Autogenerated: do not edit this file -CREATE TABLE BATCH_JOB_INSTANCE ( - JOB_INSTANCE_ID NUMBER(38) PRIMARY KEY , - VERSION NUMBER(38), - JOB_NAME VARCHAR2(100) NOT NULL , - JOB_KEY VARCHAR2(2500) -) ; - -CREATE TABLE BATCH_JOB_EXECUTION ( - JOB_EXECUTION_ID NUMBER(38) PRIMARY KEY , - VERSION NUMBER(38), - JOB_INSTANCE_ID NUMBER(38) NOT NULL, - START_TIME TIMESTAMP DEFAULT NULL, - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR2(10), - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR2(20), - EXIT_MESSAGE VARCHAR2(2500), - constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_JOB_PARAMS ( - JOB_INSTANCE_ID NUMBER(38) NOT NULL , - TYPE_CD VARCHAR2(6) NOT NULL , - KEY_NAME VARCHAR2(100) NOT NULL , - STRING_VAL VARCHAR2(250) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL NUMBER(38) , - DOUBLE_VAL NUMBER, - constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION ( - STEP_EXECUTION_ID NUMBER(38) PRIMARY KEY , - VERSION NUMBER(38) NOT NULL, - STEP_NAME VARCHAR2(100) NOT NULL, - JOB_EXECUTION_ID NUMBER(38) NOT NULL, - START_TIME TIMESTAMP NOT NULL , - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR2(10), - COMMIT_COUNT NUMBER(38) , - ITEM_COUNT NUMBER(38) , - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR2(20), - EXIT_MESSAGE VARCHAR2(2500), - constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) - references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( - STEP_EXECUTION_ID NUMBER(38) NOT NULL , - TYPE_CD VARCHAR2(6) NOT NULL , - KEY_NAME VARCHAR2(1000) NOT NULL , - STRING_VAL VARCHAR2(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL , - LONG_VAL VARCHAR2(10) , - DOUBLE_VAL NUMBER , - OBJECT_VAL BLOB, - constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) - references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) -) ; - +-- Autogenerated: do not edit this file +CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID NUMBER(38) PRIMARY KEY , + VERSION NUMBER(38), + JOB_NAME VARCHAR2(100) NOT NULL , + JOB_KEY VARCHAR2(2500) +) ; + +CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID NUMBER(38) PRIMARY KEY , + VERSION NUMBER(38), + JOB_INSTANCE_ID NUMBER(38) NOT NULL, + START_TIME TIMESTAMP DEFAULT NULL, + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR2(10), + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR2(20), + EXIT_MESSAGE VARCHAR2(2500), + constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_JOB_PARAMS ( + JOB_INSTANCE_ID NUMBER(38) NOT NULL , + TYPE_CD VARCHAR2(6) NOT NULL , + KEY_NAME VARCHAR2(100) NOT NULL , + STRING_VAL VARCHAR2(250) , + DATE_VAL TIMESTAMP DEFAULT NULL, + LONG_VAL NUMBER(38) , + DOUBLE_VAL NUMBER, + constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID NUMBER(38) PRIMARY KEY , + VERSION NUMBER(38) NOT NULL, + STEP_NAME VARCHAR2(100) NOT NULL, + JOB_EXECUTION_ID NUMBER(38) NOT NULL, + START_TIME TIMESTAMP NOT NULL , + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR2(10), + COMMIT_COUNT NUMBER(38) , + ITEM_COUNT NUMBER(38) , + READ_SKIP_COUNT NUMBER(38) , + WRITE_SKIP_COUNT NUMBER(38) , + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR2(20), + EXIT_MESSAGE VARCHAR2(2500), + constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID NUMBER(38) NOT NULL , + TYPE_CD VARCHAR2(6) NOT NULL , + KEY_NAME VARCHAR2(1000) NOT NULL , + STRING_VAL VARCHAR2(1000) , + DATE_VAL TIMESTAMP DEFAULT NULL , + LONG_VAL VARCHAR2(10) , + DOUBLE_VAL NUMBER , + OBJECT_VAL BLOB, + constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) ; + CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ; CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ; CREATE SEQUENCE BATCH_JOB_SEQ; diff --git a/spring-batch-core/src/main/resources/schema-postgresql.sql b/spring-batch-core/src/main/resources/schema-postgresql.sql index fe52aadf6..2d5ce525f 100644 --- a/spring-batch-core/src/main/resources/schema-postgresql.sql +++ b/spring-batch-core/src/main/resources/schema-postgresql.sql @@ -9,70 +9,72 @@ DROP SEQUENCE BATCH_STEP_EXECUTION_SEQ ; DROP SEQUENCE BATCH_JOB_EXECUTION_SEQ ; DROP SEQUENCE BATCH_JOB_SEQ ; --- Autogenerated: do not edit this file -CREATE TABLE BATCH_JOB_INSTANCE ( - JOB_INSTANCE_ID BIGINT PRIMARY KEY , - VERSION BIGINT, - JOB_NAME VARCHAR(100) NOT NULL , - JOB_KEY VARCHAR(2500) -) ; - -CREATE TABLE BATCH_JOB_EXECUTION ( - JOB_EXECUTION_ID BIGINT PRIMARY KEY , - VERSION BIGINT, - JOB_INSTANCE_ID BIGINT NOT NULL, - START_TIME TIMESTAMP DEFAULT NULL, - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_JOB_PARAMS ( - JOB_INSTANCE_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , - DATE_VAL TIMESTAMP DEFAULT NULL, - LONG_VAL BIGINT , - DOUBLE_VAL DOUBLE PRECISION, - constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) - references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION ( - STEP_EXECUTION_ID BIGINT PRIMARY KEY , - VERSION BIGINT NOT NULL, - STEP_NAME VARCHAR(100) NOT NULL, - JOB_EXECUTION_ID BIGINT NOT NULL, - START_TIME TIMESTAMP NOT NULL , - END_TIME TIMESTAMP DEFAULT NULL, - STATUS VARCHAR(10), - COMMIT_COUNT BIGINT , - ITEM_COUNT BIGINT , - CONTINUABLE CHAR(1), - EXIT_CODE VARCHAR(20), - EXIT_MESSAGE VARCHAR(2500), - constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) - references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) -) ; - -CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( - STEP_EXECUTION_ID BIGINT NOT NULL , - TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(1000) NOT NULL , - STRING_VAL VARCHAR(1000) , - DATE_VAL TIMESTAMP DEFAULT NULL , - LONG_VAL VARCHAR(10) , - DOUBLE_VAL DOUBLE PRECISION , - OBJECT_VAL BYTEA, - constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) - references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) -) ; - +-- Autogenerated: do not edit this file +CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_NAME VARCHAR(100) NOT NULL , + JOB_KEY VARCHAR(2500) +) ; + +CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT, + JOB_INSTANCE_ID BIGINT NOT NULL, + START_TIME TIMESTAMP DEFAULT NULL, + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_JOB_PARAMS ( + JOB_INSTANCE_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(100) NOT NULL , + STRING_VAL VARCHAR(250) , + DATE_VAL TIMESTAMP DEFAULT NULL, + LONG_VAL BIGINT , + DOUBLE_VAL DOUBLE PRECISION, + constraint JOB_INSTANCE_PARAMS_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT PRIMARY KEY , + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + START_TIME TIMESTAMP NOT NULL , + END_TIME TIMESTAMP DEFAULT NULL, + STATUS VARCHAR(10), + COMMIT_COUNT BIGINT , + ITEM_COUNT BIGINT , + READ_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + CONTINUABLE CHAR(1), + EXIT_CODE VARCHAR(20), + EXIT_MESSAGE VARCHAR(2500), + constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL , + TYPE_CD VARCHAR(6) NOT NULL , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , + DATE_VAL TIMESTAMP DEFAULT NULL , + LONG_VAL VARCHAR(10) , + DOUBLE_VAL DOUBLE PRECISION , + OBJECT_VAL BYTEA, + constraint STEP_EXECUTION_CONTEXT_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) ; + CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ; CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ; CREATE SEQUENCE BATCH_JOB_SEQ; diff --git a/spring-batch-core/src/main/sql/init.sql.vpp b/spring-batch-core/src/main/sql/init.sql.vpp index d03b9a4cf..98012fa0b 100644 --- a/spring-batch-core/src/main/sql/init.sql.vpp +++ b/spring-batch-core/src/main/sql/init.sql.vpp @@ -41,7 +41,9 @@ CREATE TABLE BATCH_STEP_EXECUTION ( END_TIME ${TIMESTAMP} DEFAULT NULL, STATUS ${VARCHAR}(10), COMMIT_COUNT ${BIGINT} , - ITEM_COUNT ${BIGINT} , + ITEM_COUNT ${BIGINT} , + READ_SKIP_COUNT ${BIGINT} , + WRITE_SKIP_COUNT ${BIGINT} , CONTINUABLE CHAR(1), EXIT_CODE ${VARCHAR}(20), EXIT_MESSAGE ${VARCHAR}(2500), diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java index 3bc47b204..b91765cbc 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractStepExecutionDaoTests.java @@ -72,6 +72,7 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona } public void testSaveExecutionAssignsIdAndVersion() throws Exception { + assertNull(stepExecution.getId()); assertNull(stepExecution.getVersion()); dao.saveStepExecution(stepExecution); @@ -80,12 +81,17 @@ public abstract class AbstractStepExecutionDaoTests extends AbstractTransactiona } public void testSaveAndFindExecution() { + stepExecution.setStatus(BatchStatus.STARTED); + stepExecution.setReadSkipCount(7); + stepExecution.setWriteSkipCount(5); dao.saveStepExecution(stepExecution); StepExecution retrieved = dao.getStepExecution(jobExecution, step); assertEquals(stepExecution, retrieved); assertEquals(BatchStatus.STARTED, retrieved.getStatus()); + assertEquals(stepExecution.getReadSkipCount(), retrieved.getReadSkipCount()); + assertEquals(stepExecution.getWriteSkipCount(), retrieved.getWriteSkipCount()); assertNull(dao.getStepExecution(jobExecution, new StepSupport("not-existing step"))); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandlerTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandlerTests.java index 310d832cf..cf6a2a917 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandlerTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/ItemSkipPolicyItemHandlerTests.java @@ -76,6 +76,7 @@ public class ItemSkipPolicyItemHandlerTests extends TestCase { handler.setItemSkipPolicy(new AlwaysSkipItemSkipPolicy()); assertEquals(new Holder("1"), handler.read(contribution)); assertEquals(new Holder("3"), handler.read(contribution)); + contribution.combineSkipCounts(); assertEquals(1, contribution.getReadSkipCount()); assertEquals(new Holder("4"), handler.read(contribution)); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java index 19722af5b..23a7f27ab 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SkipLimitStepFactoryBeanTests.java @@ -73,8 +73,11 @@ public class SkipLimitStepFactoryBeanTests extends TestCase { StepExecution stepExecution = new StepExecution(step.getName(), jobExecution); step.execute(stepExecution); + assertEquals(2, stepExecution.getSkipCount()); - + assertEquals(1, stepExecution.getReadSkipCount()); + assertEquals(1, stepExecution.getWriteSkipCount()); + // only write exception caused rollback assertEquals(1, stepExecution.getRollbackCount().intValue()); @@ -99,6 +102,8 @@ public class SkipLimitStepFactoryBeanTests extends TestCase { step.execute(stepExecution); assertEquals(2, stepExecution.getSkipCount()); + assertEquals(1, stepExecution.getReadSkipCount()); + assertEquals(1, stepExecution.getWriteSkipCount()); // no rollbacks assertEquals(0, stepExecution.getRollbackCount().intValue()); @@ -183,6 +188,8 @@ public class SkipLimitStepFactoryBeanTests extends TestCase { } assertEquals(3, stepExecution.getSkipCount()); + assertEquals(2, stepExecution.getReadSkipCount()); + assertEquals(1, stepExecution.getWriteSkipCount()); // writer did not skip "2" as it never made it to writer, only "4" did assertTrue(reader.processed.contains("4")); @@ -211,6 +218,8 @@ public class SkipLimitStepFactoryBeanTests extends TestCase { step.execute(stepExecution); assertEquals(4, stepExecution.getSkipCount()); + assertEquals(3, stepExecution.getReadSkipCount()); + assertEquals(1, stepExecution.getWriteSkipCount()); // skipped 2,3,4,5 List expectedOutput = Arrays.asList(StringUtils.commaDelimitedListToStringArray("1,6")); @@ -240,6 +249,8 @@ public class SkipLimitStepFactoryBeanTests extends TestCase { System.err.println(writer.written); System.err.println(reader.processed); assertEquals(4, stepExecution.getSkipCount()); + assertEquals(2, stepExecution.getReadSkipCount()); + assertEquals(2, stepExecution.getWriteSkipCount()); // skipped 2,3,4,5 List expectedOutput = Arrays.asList(StringUtils.commaDelimitedListToStringArray("1,6,7"));