diff --git a/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java b/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java index b73a9d40d48..7499cf19433 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java +++ b/spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManager.java @@ -118,14 +118,19 @@ class DockerComposeLifecycleManager { Stop stop = this.properties.getStop(); Wait wait = this.properties.getReadiness().getWait(); List runningServices = dockerCompose.getRunningServices(); - if (lifecycleManagement.shouldStart() && runningServices.isEmpty()) { - start.getCommand().applyTo(dockerCompose, start.getLogLevel()); - runningServices = dockerCompose.getRunningServices(); - if (wait == Wait.ONLY_IF_STARTED) { - wait = Wait.ALWAYS; + if (lifecycleManagement.shouldStart()) { + if (runningServices.isEmpty()) { + start.getCommand().applyTo(dockerCompose, start.getLogLevel()); + runningServices = dockerCompose.getRunningServices(); + if (wait == Wait.ONLY_IF_STARTED) { + wait = Wait.ALWAYS; + } + if (lifecycleManagement.shouldStop()) { + this.shutdownHandlers.add(() -> stop.getCommand().applyTo(dockerCompose, stop.getTimeout())); + } } - if (lifecycleManagement.shouldStop()) { - this.shutdownHandlers.add(() -> stop.getCommand().applyTo(dockerCompose, stop.getTimeout())); + else { + logger.info("There are already Docker Compose services running, skipping startup"); } } List relevantServices = new ArrayList<>(runningServices); diff --git a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java index f3a13c17c3d..118841abf92 100644 --- a/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java +++ b/spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/lifecycle/DockerComposeLifecycleManagerTests.java @@ -29,6 +29,7 @@ import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; import org.springframework.aot.AotDetector; @@ -38,6 +39,8 @@ import org.springframework.boot.docker.compose.core.DockerCompose; import org.springframework.boot.docker.compose.core.DockerComposeFile; import org.springframework.boot.docker.compose.core.RunningService; import org.springframework.boot.docker.compose.lifecycle.DockerComposeProperties.Readiness.Wait; +import org.springframework.boot.test.system.CapturedOutput; +import org.springframework.boot.test.system.OutputCaptureExtension; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.support.GenericApplicationContext; @@ -59,6 +62,7 @@ import static org.mockito.Mockito.never; * @author Phillip Webb * @author Scott Frederick */ +@ExtendWith(OutputCaptureExtension.class) class DockerComposeLifecycleManagerTests { @TempDir @@ -365,6 +369,21 @@ class DockerComposeLifecycleManagerTests { assertThat(event.getRunningServices()).isEqualTo(this.runningServices); } + @Test + void shouldLogIfServicesAreAlreadyRunning(CapturedOutput output) { + setUpRunningServices(); + this.lifecycleManager.start(); + assertThat(output).contains("There are already Docker Compose services running, skipping startup"); + } + + @Test + void shouldNotLogIfThereAreNoServicesRunning(CapturedOutput output) { + given(this.dockerCompose.hasDefinedServices()).willReturn(true); + given(this.dockerCompose.getRunningServices()).willReturn(Collections.emptyList()); + this.lifecycleManager.start(); + assertThat(output).doesNotContain("There are already Docker Compose services running, skipping startup"); + } + private void setUpRunningServices() { setUpRunningServices(true); }