diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java index ccdf997917..2ee3f6445a 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java @@ -34,6 +34,21 @@ public class CallableTaskletAdapter implements Tasklet, InitializingBean { private Callable callable; + /** + * Create a new {@link CallableTaskletAdapter} instance. + */ + public CallableTaskletAdapter() { + } + + /** + * Create a new {@link CallableTaskletAdapter} instance. + * @param callable the {@link Callable} to use + */ + public CallableTaskletAdapter(Callable callable) { + setCallable(callable); + afterPropertiesSet(); + } + /** * Public setter for the {@link Callable}. * @param callable the {@link Callable} to set @@ -48,7 +63,7 @@ public void setCallable(Callable callable) { * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ @Override - public void afterPropertiesSet() throws Exception { + public void afterPropertiesSet() { Assert.state(callable != null, "A Callable is required"); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java index 3792b17a32..f9d56548e4 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java @@ -25,10 +25,22 @@ class CallableTaskletAdapterTests { - private final CallableTaskletAdapter adapter = new CallableTaskletAdapter(); + @Test + public void testHandleWithConstructor() throws Exception { + CallableTaskletAdapter adapter = new CallableTaskletAdapter( + new Callable() { + @Override + public RepeatStatus call() throws Exception { + return RepeatStatus.FINISHED; + } + } + ); + assertEquals(RepeatStatus.FINISHED, adapter.execute(null, null)); + } @Test - void testHandle() throws Exception { + void testExecuteWithSetter() throws Exception { + CallableTaskletAdapter adapter = new CallableTaskletAdapter(); adapter.setCallable(new Callable() { @Override public RepeatStatus call() throws Exception { @@ -40,7 +52,6 @@ public RepeatStatus call() throws Exception { @Test void testAfterPropertiesSet() { - assertThrows(IllegalStateException.class, adapter::afterPropertiesSet); + assertThrows(IllegalStateException.class, new CallableTaskletAdapter()::afterPropertiesSet); } - }