Skip to content

Commit 22c9364

Browse files
committed
Only use AprLifecycleListener when native library is available
Closes gh-16040
1 parent db4623c commit 22c9364

File tree

4 files changed

+30
-9
lines changed

4 files changed

+30
-9
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactory.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.ArrayList;
2323
import java.util.Arrays;
2424
import java.util.Collection;
25-
import java.util.Collections;
2625
import java.util.List;
2726

2827
import org.apache.catalina.Context;
@@ -67,8 +66,7 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac
6766

6867
private List<Valve> engineValves = new ArrayList<>();
6968

70-
private List<LifecycleListener> contextLifecycleListeners = new ArrayList<>(
71-
Collections.singleton(new AprLifecycleListener()));
69+
private List<LifecycleListener> contextLifecycleListeners = getDefaultLifecycleListeners();
7270

7371
private List<TomcatContextCustomizer> tomcatContextCustomizers = new ArrayList<>();
7472

@@ -95,6 +93,13 @@ public TomcatReactiveWebServerFactory(int port) {
9593
super(port);
9694
}
9795

96+
private static List<LifecycleListener> getDefaultLifecycleListeners() {
97+
AprLifecycleListener aprLifecycleListener = new AprLifecycleListener();
98+
return AprLifecycleListener.isAprAvailable()
99+
? new ArrayList<>(Arrays.asList(aprLifecycleListener))
100+
: new ArrayList<>();
101+
}
102+
98103
@Override
99104
public WebServer getWebServer(HttpHandler httpHandler) {
100105
Tomcat tomcat = new Tomcat();

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,7 @@ public class TomcatServletWebServerFactory extends AbstractServletWebServerFacto
111111

112112
private List<Valve> contextValves = new ArrayList<>();
113113

114-
private List<LifecycleListener> contextLifecycleListeners = new ArrayList<>(
115-
Collections.singleton(new AprLifecycleListener()));
114+
private List<LifecycleListener> contextLifecycleListeners = getDefaultLifecycleListeners();
116115

117116
private List<TomcatContextCustomizer> tomcatContextCustomizers = new ArrayList<>();
118117

@@ -155,6 +154,13 @@ public TomcatServletWebServerFactory(String contextPath, int port) {
155154
super(contextPath, port);
156155
}
157156

157+
private static List<LifecycleListener> getDefaultLifecycleListeners() {
158+
AprLifecycleListener aprLifecycleListener = new AprLifecycleListener();
159+
return AprLifecycleListener.isAprAvailable()
160+
? new ArrayList<>(Arrays.asList(aprLifecycleListener))
161+
: new ArrayList<>();
162+
}
163+
158164
@Override
159165
public WebServer getWebServer(ServletContextInitializer... initializers) {
160166
Tomcat tomcat = new Tomcat();

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactoryTests.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,13 @@ public void contextIsAddedToHostBeforeCustomizersAreCalled() {
8282
@Test
8383
public void defaultTomcatListeners() {
8484
TomcatReactiveWebServerFactory factory = getFactory();
85-
assertThat(factory.getContextLifecycleListeners()).hasSize(1).first()
86-
.isInstanceOf(AprLifecycleListener.class);
85+
if (AprLifecycleListener.isAprAvailable()) {
86+
assertThat(factory.getContextLifecycleListeners()).hasSize(1).first()
87+
.isInstanceOf(AprLifecycleListener.class);
88+
}
89+
else {
90+
assertThat(factory.getContextLifecycleListeners()).isEmpty();
91+
}
8792
}
8893

8994
@Test

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,13 @@ public void tomcatEngineNames() {
134134
@Test
135135
public void defaultTomcatListeners() {
136136
TomcatServletWebServerFactory factory = getFactory();
137-
assertThat(factory.getContextLifecycleListeners()).hasSize(1).first()
138-
.isInstanceOf(AprLifecycleListener.class);
137+
if (AprLifecycleListener.isAprAvailable()) {
138+
assertThat(factory.getContextLifecycleListeners()).hasSize(1).first()
139+
.isInstanceOf(AprLifecycleListener.class);
140+
}
141+
else {
142+
assertThat(factory.getContextLifecycleListeners()).isEmpty();
143+
}
139144
}
140145

141146
@Test

0 commit comments

Comments
 (0)