From 7096c8c0246965da2dba5ee1290470cff7018a73 Mon Sep 17 00:00:00 2001 From: dsyer Date: Fri, 15 Feb 2008 14:40:33 +0000 Subject: [PATCH] OPEN - issue BATCH-364: StepScope responsibilities can be assumed by Step (not ApplicationContext) http://jira.springframework.org/browse/BATCH-364 Extend columns in attrs table -to avoid crashes resulting in optimistic lock failure. --- .../springframework/batch/core/domain/Chunker.java | 2 +- .../springframework/batch/core/domain/Entity.java | 12 ++++++++++++ .../batch/core/domain/StepExecution.java | 1 + .../batch/core/domain/StepExecutionTests.java | 14 +++++++------- .../repository/dao/JdbcStepExecutionDao.java | 1 - .../batch/execution/repository/dao/MapStepDao.java | 3 ++- .../batch/execution/step/simple/ItemChunker.java | 3 ++- .../execution/step/simple/SimpleStepExecutor.java | 10 ++++++++-- .../src/main/resources/schema-db2.sql | 6 +++--- .../src/main/resources/schema-derby.sql | 6 +++--- .../src/main/resources/schema-hsqldb.sql | 6 +++--- .../src/main/resources/schema-mysql.sql | 6 +++--- .../src/main/resources/schema-oracle10g.sql | 6 +++--- .../src/main/resources/schema-postgresql.sql | 6 +++--- spring-batch-execution/src/main/sql/init.sql.vpp | 6 +++--- .../batch/execution/repository/MockStepDao.java | 3 ++- .../repository/SimpleJobRepositoryTests.java | 9 +++++---- .../batch/execution/repository/dao/init.sql | 6 +++--- .../src/main/resources/jobs/adhocLoopJob.xml | 5 +---- 19 files changed, 65 insertions(+), 46 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Chunker.java b/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Chunker.java index b9b555826..c43143c43 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Chunker.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Chunker.java @@ -45,6 +45,6 @@ public interface Chunker { * * @param stepExecution */ - public void flush(StepExecution stepExecution); + public void flush(Entity stepExecution); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Entity.java b/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Entity.java index 241a9651a..ed040fc26 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Entity.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/domain/Entity.java @@ -75,6 +75,17 @@ public class Entity implements Serializable { } } + /** + * + */ + protected void decrementVersion() { + if (version == null || version.intValue()==0) { + version = new Integer(0); + } else { + version = new Integer(version.intValue() - 1); + } + } + // @Override public String toString() { return ClassUtils.getShortName(getClass()) + ": id=" + getId(); @@ -121,4 +132,5 @@ public class Entity implements Serializable { } return 39 + 87 * id.hashCode(); } + } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/domain/StepExecution.java b/spring-batch-core/src/main/java/org/springframework/batch/core/domain/StepExecution.java index 4f2032589..8ea3530e9 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/domain/StepExecution.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/domain/StepExecution.java @@ -357,6 +357,7 @@ public class StepExecution extends Entity { */ public synchronized void rollback() { rollbackCount++; + decrementVersion(); } /** diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/domain/StepExecutionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/domain/StepExecutionTests.java index c6ec5038d..f698f9585 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/domain/StepExecutionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/domain/StepExecutionTests.java @@ -210,28 +210,28 @@ public class StepExecutionTests extends TestCase { } public void testEqualsWithSameIdentifier() throws Exception { - StepExecution step1 = newStepExecution(new Long(100), new Long(11)); - StepExecution step2 = newStepExecution(new Long(100), new Long(11)); + Entity step1 = newStepExecution(new Long(100), new Long(11)); + Entity step2 = newStepExecution(new Long(100), new Long(11)); assertEquals(step1, step2); } public void testEqualsWithNull() throws Exception { - StepExecution step = newStepExecution(new Long(100), new Long(11)); + Entity step = newStepExecution(new Long(100), new Long(11)); assertFalse(step.equals(null)); } public void testEqualsWithNullIdentifiers() throws Exception { - StepExecution step = newStepExecution(new Long(100), new Long(11)); + Entity step = newStepExecution(new Long(100), new Long(11)); assertFalse(step.equals(new StepExecution())); } public void testEqualsWithNullJob() throws Exception { - StepExecution step = newStepExecution(null, new Long(11)); + Entity step = newStepExecution(null, new Long(11)); assertFalse(step.equals(new StepExecution())); } public void testEqualsWithNullStep() throws Exception { - StepExecution step = newStepExecution(new Long(11), null); + Entity step = newStepExecution(new Long(11), null); assertFalse(step.equals(new StepExecution())); } @@ -240,7 +240,7 @@ public class StepExecutionTests extends TestCase { } public void testEqualsWithDifferent() throws Exception { - StepExecution step = newStepExecution(new Long(43), new Long(13)); + Entity step = newStepExecution(new Long(43), new Long(13)); assertFalse(execution.equals(step)); } diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JdbcStepExecutionDao.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JdbcStepExecutionDao.java index 410641a6c..bc6b12cfa 100644 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JdbcStepExecutionDao.java +++ b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/JdbcStepExecutionDao.java @@ -216,7 +216,6 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao } } }; - getJdbcTemplate().execute(getQuery(INSERT_STEP_EXECUTION_ATTRS), callback); } diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java index 918e6dd65..07e30a335 100644 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java +++ b/spring-batch-execution/src/main/java/org/springframework/batch/execution/repository/dao/MapStepDao.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.Set; import java.util.Map.Entry; +import org.springframework.batch.core.domain.Entity; import org.springframework.batch.core.domain.JobExecution; import org.springframework.batch.core.domain.JobInstance; import org.springframework.batch.core.domain.StepExecution; @@ -123,7 +124,7 @@ public class MapStepDao implements StepDao { Entry entry = (Entry)it.next(); Set executions = (Set)entry.getValue(); for(Iterator executionsIt = executions.iterator();executionsIt.hasNext();){ - StepExecution stepExecution = (StepExecution)executionsIt.next(); + Entity stepExecution = (Entity)executionsIt.next(); if(stepExecution.getId() == stepExecutionId){ stepExecutions.add(stepExecution); } diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/ItemChunker.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/ItemChunker.java index 60c4293a1..b5be9d4c8 100644 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/ItemChunker.java +++ b/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/ItemChunker.java @@ -21,6 +21,7 @@ import java.util.List; import org.springframework.batch.core.domain.Chunk; import org.springframework.batch.core.domain.Chunker; import org.springframework.batch.core.domain.ChunkingResult; +import org.springframework.batch.core.domain.Entity; import org.springframework.batch.core.domain.ItemSkipPolicy; import org.springframework.batch.core.domain.StepExecution; import org.springframework.batch.io.exception.ReadFailureException; @@ -98,7 +99,7 @@ public class ItemChunker implements Chunker { /** * No-op implementation. */ - public void flush(StepExecution stepExecution) { + public void flush(Entity stepExecution) { } } diff --git a/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/SimpleStepExecutor.java b/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/SimpleStepExecutor.java index 4d608cf0c..7e8d0357d 100644 --- a/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/SimpleStepExecutor.java +++ b/spring-batch-execution/src/main/java/org/springframework/batch/execution/step/simple/SimpleStepExecutor.java @@ -294,7 +294,7 @@ public class SimpleStepExecutor implements InitializingBean { boolean isRestart = stepInstance.getStepExecutionCount() > 0 ? true : false; ExitStatus status = ExitStatus.FAILED; - + try { stepExecution.setStartTime(new Date(System.currentTimeMillis())); @@ -434,9 +434,15 @@ public class SimpleStepExecutor implements InitializingBean { jobRepository.saveOrUpdate(stepExecution); streamManager.close(stepExecution); } + catch (Exception e) { + logger + .error( + "Failed to update step execution: probably fatal, so there is already an exception on the stack.", + e); + } finally { // clear any registered synchronizations - + StepSynchronizationManager.close(); } } diff --git a/spring-batch-execution/src/main/resources/schema-db2.sql b/spring-batch-execution/src/main/resources/schema-db2.sql index a99cb490b..4741d0188 100644 --- a/spring-batch-execution/src/main/resources/schema-db2.sql +++ b/spring-batch-execution/src/main/resources/schema-db2.sql @@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT BIGINT , TASK_COUNT BIGINT , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID BIGINT NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL DOUBLE PRECISION , diff --git a/spring-batch-execution/src/main/resources/schema-derby.sql b/spring-batch-execution/src/main/resources/schema-derby.sql index 6a1624e66..bab71fd02 100644 --- a/spring-batch-execution/src/main/resources/schema-derby.sql +++ b/spring-batch-execution/src/main/resources/schema-derby.sql @@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT BIGINT , TASK_COUNT BIGINT , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID BIGINT NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL DOUBLE PRECISION , diff --git a/spring-batch-execution/src/main/resources/schema-hsqldb.sql b/spring-batch-execution/src/main/resources/schema-hsqldb.sql index 04f595552..f045b38f6 100644 --- a/spring-batch-execution/src/main/resources/schema-hsqldb.sql +++ b/spring-batch-execution/src/main/resources/schema-hsqldb.sql @@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT BIGINT , TASK_COUNT BIGINT , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID BIGINT NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL DOUBLE PRECISION , diff --git a/spring-batch-execution/src/main/resources/schema-mysql.sql b/spring-batch-execution/src/main/resources/schema-mysql.sql index e494c6f6b..6b024de36 100644 --- a/spring-batch-execution/src/main/resources/schema-mysql.sql +++ b/spring-batch-execution/src/main/resources/schema-mysql.sql @@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT BIGINT , TASK_COUNT BIGINT , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID BIGINT NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL DOUBLE PRECISION , diff --git a/spring-batch-execution/src/main/resources/schema-oracle10g.sql b/spring-batch-execution/src/main/resources/schema-oracle10g.sql index abf1c9a59..1f58e0d45 100644 --- a/spring-batch-execution/src/main/resources/schema-oracle10g.sql +++ b/spring-batch-execution/src/main/resources/schema-oracle10g.sql @@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT NUMBER(38) , TASK_COUNT NUMBER(38) , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID NUMBER(38) NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL DOUBLE PRECISION , diff --git a/spring-batch-execution/src/main/resources/schema-postgresql.sql b/spring-batch-execution/src/main/resources/schema-postgresql.sql index a99cb490b..4741d0188 100644 --- a/spring-batch-execution/src/main/resources/schema-postgresql.sql +++ b/spring-batch-execution/src/main/resources/schema-postgresql.sql @@ -53,7 +53,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT BIGINT , TASK_COUNT BIGINT , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -61,8 +61,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID BIGINT NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL DOUBLE PRECISION , diff --git a/spring-batch-execution/src/main/sql/init.sql.vpp b/spring-batch-execution/src/main/sql/init.sql.vpp index 789aa3bae..5e8bcdf5b 100644 --- a/spring-batch-execution/src/main/sql/init.sql.vpp +++ b/spring-batch-execution/src/main/sql/init.sql.vpp @@ -40,7 +40,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT ${BIGINT} , TASK_COUNT ${BIGINT} , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -48,8 +48,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID ${BIGINT} NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL ${DOUBLE} , diff --git a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java index a3c7e0cc2..b80b60739 100644 --- a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java +++ b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/MockStepDao.java @@ -18,6 +18,7 @@ package org.springframework.batch.execution.repository; import java.util.List; +import org.springframework.batch.core.domain.Entity; import org.springframework.batch.core.domain.JobExecution; import org.springframework.batch.core.domain.JobInstance; import org.springframework.batch.core.domain.StepExecution; @@ -85,7 +86,7 @@ public class MockStepDao implements StepDao { ExecutionContext executionContext) { } - public StepExecution getStepExecution(Long stepExecutionId, + public Entity getStepExecution(Long stepExecutionId, StepInstance stepInstance) { return null; } diff --git a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java index 01451a052..37c88a6f0 100644 --- a/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java +++ b/spring-batch-execution/src/test/java/org/springframework/batch/execution/repository/SimpleJobRepositoryTests.java @@ -25,6 +25,7 @@ import junit.framework.TestCase; import org.easymock.ArgumentsMatcher; import org.easymock.MockControl; +import org.springframework.batch.core.domain.Entity; import org.springframework.batch.core.domain.JobExecution; import org.springframework.batch.core.domain.JobInstance; import org.springframework.batch.core.domain.JobParameters; @@ -169,8 +170,8 @@ public class SimpleJobRepositoryTests extends TestCase { // and the executions in the list contain one with an end date execution.setEndTime(new Date(System.currentTimeMillis())); - StepExecution databaseStep1Exec = new StepExecution(databaseStep1, execution, new Long(1)); - StepExecution databaseStep2Exec = new StepExecution(databaseStep2, execution, new Long(2)); + Entity databaseStep1Exec = new StepExecution(databaseStep1, execution, new Long(1)); + Entity databaseStep2Exec = new StepExecution(databaseStep2, execution, new Long(2)); List jobs = new ArrayList(); jobDao.findJobInstances(jobConfiguration.getName(), jobParameters); @@ -411,8 +412,8 @@ public class SimpleJobRepositoryTests extends TestCase { public void testFindStepsFixesInvalidExecutionContext() throws Exception { - StepExecution databaseStep1Exec = new StepExecution(databaseStep1, null, new Long(1)); - StepExecution databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2)); + Entity databaseStep1Exec = new StepExecution(databaseStep1, null, new Long(1)); + Entity databaseStep2Exec = new StepExecution(databaseStep2, null, new Long(2)); List jobs = new ArrayList(); jobDao.findJobInstances(jobConfiguration.getName(), jobParameters); diff --git a/spring-batch-execution/src/test/resources/org/springframework/batch/execution/repository/dao/init.sql b/spring-batch-execution/src/test/resources/org/springframework/batch/execution/repository/dao/init.sql index 77736e63c..cd97e0f5a 100644 --- a/spring-batch-execution/src/test/resources/org/springframework/batch/execution/repository/dao/init.sql +++ b/spring-batch-execution/src/test/resources/org/springframework/batch/execution/repository/dao/init.sql @@ -40,7 +40,7 @@ CREATE TABLE BATCH_STEP_EXECUTION ( STATUS VARCHAR(10), COMMIT_COUNT BIGINT , TASK_COUNT BIGINT , - TASK_STATISTICS VARCHAR(2500), + TASK_STATISTICS VARCHAR(500), CONTINUABLE CHAR(1), EXIT_CODE VARCHAR(20), EXIT_MESSAGE VARCHAR(2500)); @@ -48,8 +48,8 @@ CREATE TABLE BATCH_STEP_EXECUTION ( CREATE TABLE BATCH_STEP_EXECUTION_ATTRS ( STEP_EXECUTION_ID BIGINT NOT NULL , TYPE_CD VARCHAR(6) NOT NULL , - KEY_NAME VARCHAR(100) NOT NULL , - STRING_VAL VARCHAR(250) , + KEY_NAME VARCHAR(1000) NOT NULL , + STRING_VAL VARCHAR(1000) , DATE_VAL TIMESTAMP , LONG_VAL VARCHAR(10) , DOUBLE_VAL DOUBLE PRECISION , diff --git a/spring-batch-samples/src/main/resources/jobs/adhocLoopJob.xml b/spring-batch-samples/src/main/resources/jobs/adhocLoopJob.xml index 8f9a76d70..9cee0e428 100644 --- a/spring-batch-samples/src/main/resources/jobs/adhocLoopJob.xml +++ b/spring-batch-samples/src/main/resources/jobs/adhocLoopJob.xml @@ -18,10 +18,7 @@ - - + class="org.springframework.batch.sample.tasklet.InfiniteLoopTasklet"/>