Repackage output capture and always use extension declaratively
Closes gh-17029
This commit is contained in:
@@ -21,7 +21,7 @@ import io.micrometer.prometheus.PrometheusConfig;
|
||||
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
||||
import io.prometheus.client.CollectorRegistry;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
|
||||
import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusPushGatewayManager;
|
||||
@@ -29,8 +29,8 @@ import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScra
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.extension.CapturedOutput;
|
||||
import org.springframework.boot.test.extension.OutputExtension;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
import org.springframework.boot.test.system.OutputCaptureExtension;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
@@ -43,11 +43,9 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
public class PrometheusMetricsExportAutoConfigurationTests {
|
||||
|
||||
@RegisterExtension
|
||||
CapturedOutput output = OutputExtension.capture();
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations
|
||||
.of(PrometheusMetricsExportAutoConfiguration.class));
|
||||
@@ -152,14 +150,14 @@ public class PrometheusMetricsExportAutoConfigurationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withPushGatewayEnabled() {
|
||||
public void withPushGatewayEnabled(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withConfiguration(
|
||||
AutoConfigurations.of(ManagementContextAutoConfiguration.class))
|
||||
.withPropertyValues(
|
||||
"management.metrics.export.prometheus.pushgateway.enabled=true")
|
||||
.withUserConfiguration(BaseConfiguration.class).run((context) -> {
|
||||
assertThat(this.output.toString())
|
||||
assertThat(capturedOutput)
|
||||
.doesNotContain("Invalid PushGateway base url");
|
||||
hasGatewayURL(context, "http://localhost:9091/metrics/job/");
|
||||
});
|
||||
@@ -167,7 +165,7 @@ public class PrometheusMetricsExportAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
public void withCustomLegacyPushGatewayURL() {
|
||||
public void withCustomLegacyPushGatewayURL(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withConfiguration(
|
||||
AutoConfigurations.of(ManagementContextAutoConfiguration.class))
|
||||
@@ -175,8 +173,7 @@ public class PrometheusMetricsExportAutoConfigurationTests {
|
||||
"management.metrics.export.prometheus.pushgateway.enabled=true",
|
||||
"management.metrics.export.prometheus.pushgateway.base-url=localhost:9090")
|
||||
.withUserConfiguration(BaseConfiguration.class).run((context) -> {
|
||||
assertThat(this.output.toString())
|
||||
.contains("Invalid PushGateway base url")
|
||||
assertThat(capturedOutput).contains("Invalid PushGateway base url")
|
||||
.contains("localhost:9090");
|
||||
hasGatewayURL(context, "http://localhost:9090/metrics/job/");
|
||||
});
|
||||
|
||||
@@ -20,7 +20,7 @@ import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.Timer;
|
||||
import io.micrometer.core.instrument.distribution.HistogramSnapshot;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
|
||||
import org.springframework.boot.actuate.metrics.web.client.DefaultRestTemplateExchangeTagsProvider;
|
||||
@@ -29,8 +29,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.extension.CapturedOutput;
|
||||
import org.springframework.boot.test.extension.OutputExtension;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
import org.springframework.boot.test.system.OutputCaptureExtension;
|
||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.test.web.client.MockRestServiceServer;
|
||||
@@ -47,6 +47,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat
|
||||
* @author Jon Schneider
|
||||
* @author Raheela Aslam
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
public class RestTemplateMetricsConfigurationTests {
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
@@ -54,9 +55,6 @@ public class RestTemplateMetricsConfigurationTests {
|
||||
.withConfiguration(AutoConfigurations.of(RestTemplateAutoConfiguration.class,
|
||||
HttpClientMetricsAutoConfiguration.class));
|
||||
|
||||
@RegisterExtension
|
||||
CapturedOutput output = OutputExtension.capture();
|
||||
|
||||
@Test
|
||||
public void restTemplateCreatedWithBuilderIsInstrumented() {
|
||||
this.contextRunner.run((context) -> {
|
||||
@@ -78,26 +76,26 @@ public class RestTemplateMetricsConfigurationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied() {
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.metrics.web.client.max-uri-tags=2")
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.client.requests").meters()).hasSize(2);
|
||||
assertThat(this.output.toString()).contains(
|
||||
assertThat(capturedOutput).contains(
|
||||
"Reached the maximum number of URI tags for 'http.client.requests'.")
|
||||
.contains("Are you using 'uriVariables'?");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.metrics.web.client.max-uri-tags=5")
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.client.requests").meters()).hasSize(3);
|
||||
assertThat(this.output.toString()).doesNotContain(
|
||||
assertThat(capturedOutput).doesNotContain(
|
||||
"Reached the maximum number of URI tags for 'http.client.requests'.")
|
||||
.doesNotContain("Are you using 'uriVariables'?");
|
||||
});
|
||||
|
||||
@@ -22,7 +22,7 @@ import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.Timer;
|
||||
import io.micrometer.core.instrument.distribution.HistogramSnapshot;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
|
||||
@@ -31,8 +31,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.extension.CapturedOutput;
|
||||
import org.springframework.boot.test.extension.OutputExtension;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
import org.springframework.boot.test.system.OutputCaptureExtension;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -51,6 +51,7 @@ import static org.mockito.Mockito.mock;
|
||||
* @author Brian Clozel
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
public class WebClientMetricsConfigurationTests {
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
@@ -58,9 +59,6 @@ public class WebClientMetricsConfigurationTests {
|
||||
.withConfiguration(AutoConfigurations.of(WebClientAutoConfiguration.class,
|
||||
HttpClientMetricsAutoConfiguration.class));
|
||||
|
||||
@RegisterExtension
|
||||
CapturedOutput output = OutputExtension.capture();
|
||||
|
||||
@Test
|
||||
public void webClientCreatedWithBuilderIsInstrumented() {
|
||||
this.contextRunner.run((context) -> {
|
||||
@@ -79,26 +77,26 @@ public class WebClientMetricsConfigurationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied() {
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.metrics.web.client.max-uri-tags=2")
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.client.requests").meters()).hasSize(2);
|
||||
assertThat(this.output.toString()).contains(
|
||||
assertThat(capturedOutput).contains(
|
||||
"Reached the maximum number of URI tags for 'http.client.requests'.")
|
||||
.contains("Are you using 'uriVariables'?");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.metrics.web.client.max-uri-tags=5")
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.client.requests").meters()).hasSize(3);
|
||||
assertThat(this.output.toString()).doesNotContain(
|
||||
assertThat(capturedOutput).doesNotContain(
|
||||
"Reached the maximum number of URI tags for 'http.client.requests'.")
|
||||
.doesNotContain("Are you using 'uriVariables'?");
|
||||
});
|
||||
|
||||
@@ -18,7 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics.web.reactive;
|
||||
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.web.TestController;
|
||||
@@ -29,8 +29,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.test.extension.CapturedOutput;
|
||||
import org.springframework.boot.test.extension.OutputExtension;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
import org.springframework.boot.test.system.OutputCaptureExtension;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||
@@ -44,15 +44,13 @@ import static org.mockito.Mockito.mock;
|
||||
* @author Brian Clozel
|
||||
* @author Dmytro Nosan
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
public class WebFluxMetricsAutoConfigurationTests {
|
||||
|
||||
private ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner()
|
||||
.with(MetricsRun.simple()).withConfiguration(
|
||||
AutoConfigurations.of(WebFluxMetricsAutoConfiguration.class));
|
||||
|
||||
@RegisterExtension
|
||||
CapturedOutput output = OutputExtension.capture();
|
||||
|
||||
@Test
|
||||
public void shouldProvideWebFluxMetricsBeans() {
|
||||
this.contextRunner.run((context) -> {
|
||||
@@ -69,7 +67,7 @@ public class WebFluxMetricsAutoConfigurationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied() {
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class))
|
||||
.withUserConfiguration(TestController.class)
|
||||
@@ -77,14 +75,14 @@ public class WebFluxMetricsAutoConfigurationTests {
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.server.requests").meters()).hasSize(2);
|
||||
assertThat(this.output.toString())
|
||||
assertThat(capturedOutput)
|
||||
.contains("Reached the maximum number of URI tags "
|
||||
+ "for 'http.server.requests'");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
|
||||
this.contextRunner
|
||||
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class))
|
||||
.withUserConfiguration(TestController.class)
|
||||
@@ -92,7 +90,7 @@ public class WebFluxMetricsAutoConfigurationTests {
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.server.requests").meters()).hasSize(3);
|
||||
assertThat(this.output.toString()).doesNotContain(
|
||||
assertThat(capturedOutput).doesNotContain(
|
||||
"Reached the maximum number of URI tags for 'http.server.requests'");
|
||||
});
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ import io.micrometer.core.instrument.Tag;
|
||||
import io.micrometer.core.instrument.Timer;
|
||||
import io.micrometer.core.instrument.distribution.HistogramSnapshot;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
|
||||
@@ -42,8 +42,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
||||
import org.springframework.boot.test.extension.CapturedOutput;
|
||||
import org.springframework.boot.test.extension.OutputExtension;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
import org.springframework.boot.test.system.OutputCaptureExtension;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -63,15 +63,13 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
* @author Dmytro Nosan
|
||||
* @author Tadaya Tsuyukubo
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
public class WebMvcMetricsAutoConfigurationTests {
|
||||
|
||||
private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
|
||||
.with(MetricsRun.simple()).withConfiguration(
|
||||
AutoConfigurations.of(WebMvcMetricsAutoConfiguration.class));
|
||||
|
||||
@RegisterExtension
|
||||
CapturedOutput output = OutputExtension.capture();
|
||||
|
||||
@Test
|
||||
public void backsOffWhenMeterRegistryIsMissing() {
|
||||
new WebApplicationContextRunner()
|
||||
@@ -112,7 +110,7 @@ public class WebMvcMetricsAutoConfigurationTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied() {
|
||||
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
|
||||
this.contextRunner.withUserConfiguration(TestController.class)
|
||||
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
|
||||
WebMvcAutoConfiguration.class))
|
||||
@@ -120,14 +118,14 @@ public class WebMvcMetricsAutoConfigurationTests {
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.server.requests").meters()).hasSize(2);
|
||||
assertThat(this.output.toString())
|
||||
assertThat(capturedOutput)
|
||||
.contains("Reached the maximum number of URI tags "
|
||||
+ "for 'http.server.requests'");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
|
||||
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
|
||||
this.contextRunner.withUserConfiguration(TestController.class)
|
||||
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
|
||||
WebMvcAutoConfiguration.class))
|
||||
@@ -135,7 +133,7 @@ public class WebMvcMetricsAutoConfigurationTests {
|
||||
.run((context) -> {
|
||||
MeterRegistry registry = getInitializedMeterRegistry(context);
|
||||
assertThat(registry.get("http.server.requests").meters()).hasSize(3);
|
||||
assertThat(this.output.toString())
|
||||
assertThat(capturedOutput)
|
||||
.doesNotContain("Reached the maximum number of URI tags "
|
||||
+ "for 'http.server.requests'");
|
||||
});
|
||||
|
||||
@@ -19,7 +19,7 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration;
|
||||
@@ -27,8 +27,8 @@ import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagem
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
|
||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
||||
import org.springframework.boot.test.extension.CapturedOutput;
|
||||
import org.springframework.boot.test.extension.OutputExtension;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
import org.springframework.boot.test.system.OutputCaptureExtension;
|
||||
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -39,13 +39,12 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
* @author Madhura Bhave
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
public class ManagementContextAutoConfigurationTests {
|
||||
|
||||
@RegisterExtension
|
||||
CapturedOutput output = OutputExtension.capture();
|
||||
|
||||
@Test
|
||||
public void childManagementContextShouldStartForEmbeddedServer() {
|
||||
public void childManagementContextShouldStartForEmbeddedServer(
|
||||
CapturedOutput capturedOutput) {
|
||||
WebApplicationContextRunner contextRunner = new WebApplicationContextRunner(
|
||||
AnnotationConfigServletWebServerApplicationContext::new)
|
||||
.withConfiguration(AutoConfigurations.of(
|
||||
@@ -54,12 +53,12 @@ public class ManagementContextAutoConfigurationTests {
|
||||
ServletManagementContextAutoConfiguration.class,
|
||||
WebEndpointAutoConfiguration.class,
|
||||
EndpointAutoConfiguration.class));
|
||||
contextRunner.withPropertyValues("server.port=0", "management.server.port=0").run(
|
||||
(context) -> assertThat(tomcatStartedOccurencesIn(this.output.toString()))
|
||||
contextRunner.withPropertyValues("server.port=0", "management.server.port=0")
|
||||
.run((context) -> assertThat(tomcatStartedOccurencesIn(capturedOutput))
|
||||
.isEqualTo(2));
|
||||
}
|
||||
|
||||
private int tomcatStartedOccurencesIn(String output) {
|
||||
private int tomcatStartedOccurencesIn(CharSequence output) {
|
||||
int matches = 0;
|
||||
Matcher matcher = Pattern.compile("Tomcat started on port").matcher(output);
|
||||
while (matcher.find()) {
|
||||
|
||||
Reference in New Issue
Block a user