diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskProperties.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskProperties.java index b5dbfb5c..5f2a87e2 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskProperties.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskProperties.java @@ -60,7 +60,7 @@ public class TaskProperties { * When set to true the context is closed at the end of the task. Else * the context remains open. */ - private Boolean closecontextEnabled = true; + private Boolean closecontextEnabled = false; public String getExternalExecutionId() { return externalExecutionId; diff --git a/spring-cloud-task-docs/src/main/asciidoc/features.adoc b/spring-cloud-task-docs/src/main/asciidoc/features.adoc index d20d9155..087249d1 100644 --- a/spring-cloud-task-docs/src/main/asciidoc/features.adoc +++ b/spring-cloud-task-docs/src/main/asciidoc/features.adoc @@ -47,10 +47,10 @@ Upon completion of all of the `*Runner#run` calls from Spring Boot or the failur `ApplicationContext` (indicated via a `ApplicationFailedEvent`), the task execution is updated in the repository with the results. -NOTE: At the completion of a task (all `*Runner#run` methods are called and the task -repository has been updated) the `ApplicationContext` will be closed by default. This -behavior can be overriden by setting the property `spring.cloud.task.closecontext_enable` -to false. +NOTE: If the application requires the `ApplicationContext` to be closed at the +completion of a task (all `*Runner#run` methods are called and the task +repository has been updated), set the property `spring.cloud.task.closecontext_enable` +to true. [[features-task-execution-details]] === The TaskExecution diff --git a/spring-cloud-task-docs/src/main/asciidoc/getting-started.adoc b/spring-cloud-task-docs/src/main/asciidoc/getting-started.adoc index b2c4f2ad..3d85e826 100755 --- a/spring-cloud-task-docs/src/main/asciidoc/getting-started.adoc +++ b/spring-cloud-task-docs/src/main/asciidoc/getting-started.adoc @@ -290,28 +290,3 @@ If you notice, there are three lines of interest in the above output: NOTE: A simple task application can be found in the samples module of the Spring Cloud Task Project https://github.com/spring-cloud/spring-cloud-task/tree/master/spring-cloud-task-samples/timestamp[here]. - - -=== Writing your test - -When writing your unit tests for a Spring Cloud Task application we have to keep -in mind that Spring Cloud Task closes the context at the completion of the task -as discussed <>. If you are using Spring -Framework's testing functionality to manage the application context, you'll want to turn -off Spring Cloud Task's auto-closing of the context. Add the following -line: `@TestPropertySource(properties = {"spring.cloud.task.closecontext_enable=false"})` -to your tests will keep the context open. For example: - -``` -@RunWith(SpringRunner.class) -@SpringBootTest -@TestPropertySource(properties = {"spring.cloud.task.closecontext_enabled=false"}) -public class DemoApplicationTests { - - @Test - public void contextLoads() { - //your test here - } - -} -``` \ No newline at end of file diff --git a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java index e1dcf34a..30214b37 100644 --- a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java +++ b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartTests.java @@ -25,6 +25,7 @@ import java.util.Map; import javax.sql.DataSource; import org.h2.tools.Server; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -39,6 +40,7 @@ import org.springframework.cloud.task.repository.support.SimpleTaskExplorer; import org.springframework.cloud.task.repository.support.SimpleTaskRepository; import org.springframework.cloud.task.repository.support.TaskExecutionDaoFactoryBean; import org.springframework.context.ApplicationContextException; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.ConfigurableEnvironment; @@ -88,6 +90,15 @@ public class TaskStartTests { private TaskRepository taskRepository; + private ConfigurableApplicationContext applicationContext; + + @After + public void tearDown() { + if (this.applicationContext != null && this.applicationContext.isActive() ) { + this.applicationContext.close(); + } + } + @Autowired public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; @@ -135,7 +146,7 @@ public class TaskStartTests { public void testWithGeneratedTaskExecution() throws Exception { taskRepository.createTaskExecution(); assertEquals("Only one row is expected", 1, taskExplorer.getTaskExecutionCount()); - getTaskApplication(1).run(new String[0]); + this.applicationContext = getTaskApplication(1).run(new String[0]); assertTrue(waitForDBToBePopulated()); Page taskExecutions = taskExplorer.findAll(PageRequest.of(0, 10)); @@ -151,7 +162,7 @@ public class TaskStartTests { assertEquals("Only one row is expected", 1, taskExplorer.getTaskExecutionCount()); assertEquals(TASK_EXECUTION_NAME, taskExplorer.getTaskExecution(1).getTaskName()); - getTaskApplication(1).run(new String[0]); + this.applicationContext = getTaskApplication(1).run(new String[0]); assertTrue(waitForDBToBePopulated()); Page taskExecutions = taskExplorer.findAll(PageRequest.of(0, 10)); @@ -163,7 +174,7 @@ public class TaskStartTests { @Test(expected = ApplicationContextException.class) public void testWithNoTaskExecution() throws Exception { - getTaskApplication(55).run(new String[0]); + this.applicationContext = getTaskApplication(55).run(new String[0]); } @Test(expected = ApplicationContextException.class) @@ -171,7 +182,7 @@ public class TaskStartTests { taskRepository.createTaskExecution(); assertEquals("Only one row is expected", 1, taskExplorer.getTaskExecutionCount()); taskRepository.completeTaskExecution(1, 0, new Date(),""); - getTaskApplication(1).run(new String[0]); + this.applicationContext = getTaskApplication(1).run(new String[0]); } private SpringApplication getTaskApplication(Integer executionId) { SpringApplication myapp = new SpringApplication(TaskStartApplication.class);