Add loadOnStartup property to EndpointServlet
loadOnStartup property was missing from EndpointServlet and cannot be set inside ServletEndpointRegistrar. Now it can be set and register a Servlet with that integer property ready to act upon registration. See gh-16053
This commit is contained in:
parent
873fd3f6b0
commit
b99c05329f
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2018 the original author or authors.
|
* Copyright 2012-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -35,23 +35,31 @@ public final class EndpointServlet {
|
||||||
|
|
||||||
private final Servlet servlet;
|
private final Servlet servlet;
|
||||||
|
|
||||||
|
private final int loadOnStartup;
|
||||||
|
|
||||||
private final Map<String, String> initParameters;
|
private final Map<String, String> initParameters;
|
||||||
|
|
||||||
public EndpointServlet(Class<? extends Servlet> servlet) {
|
public EndpointServlet(Class<? extends Servlet> servlet) {
|
||||||
Assert.notNull(servlet, "Servlet must not be null");
|
Assert.notNull(servlet, "Servlet must not be null");
|
||||||
this.servlet = BeanUtils.instantiateClass(servlet);
|
this.servlet = BeanUtils.instantiateClass(servlet);
|
||||||
this.initParameters = Collections.emptyMap();
|
this.initParameters = Collections.emptyMap();
|
||||||
|
this.loadOnStartup = -1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public EndpointServlet(Servlet servlet) {
|
public EndpointServlet(Servlet servlet) {
|
||||||
Assert.notNull(servlet, "Servlet must not be null");
|
Assert.notNull(servlet, "Servlet must not be null");
|
||||||
this.servlet = servlet;
|
this.servlet = servlet;
|
||||||
this.initParameters = Collections.emptyMap();
|
this.initParameters = Collections.emptyMap();
|
||||||
|
this.loadOnStartup = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private EndpointServlet(Servlet servlet, Map<String, String> initParameters) {
|
private EndpointServlet(Servlet servlet, Map<String, String> initParameters,
|
||||||
|
int loadOnStartup) {
|
||||||
this.servlet = servlet;
|
this.servlet = servlet;
|
||||||
this.initParameters = Collections.unmodifiableMap(initParameters);
|
this.initParameters = Collections.unmodifiableMap(initParameters);
|
||||||
|
this.loadOnStartup = loadOnStartup;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public EndpointServlet withInitParameter(String name, String value) {
|
public EndpointServlet withInitParameter(String name, String value) {
|
||||||
|
@ -67,7 +75,23 @@ public final class EndpointServlet {
|
||||||
Map<String, String> mergedInitParameters = new LinkedHashMap<>(
|
Map<String, String> mergedInitParameters = new LinkedHashMap<>(
|
||||||
this.initParameters);
|
this.initParameters);
|
||||||
mergedInitParameters.putAll(initParameters);
|
mergedInitParameters.putAll(initParameters);
|
||||||
return new EndpointServlet(this.servlet, mergedInitParameters);
|
return new EndpointServlet(this.servlet, mergedInitParameters,
|
||||||
|
this.loadOnStartup);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the <code>loadOnStartup</code> priority that will be set on Servlet
|
||||||
|
* registration
|
||||||
|
* <p>
|
||||||
|
* The default value for <tt>loadOnStartup</tt> is <code>-1</code>.
|
||||||
|
* @param loadOnStartup the initialization priority of the Servlet
|
||||||
|
* @return a new instance of {@link EndpointServlet} with the provided
|
||||||
|
* <tt>loadOnStartup</tt> value set
|
||||||
|
* @since 2.2.0
|
||||||
|
* @see ServletRegistration.Dynamic#setLoadOnStartup(int)
|
||||||
|
*/
|
||||||
|
public EndpointServlet withLoadOnStartup(int loadOnStartup) {
|
||||||
|
return new EndpointServlet(this.servlet, this.initParameters, loadOnStartup);
|
||||||
}
|
}
|
||||||
|
|
||||||
Servlet getServlet() {
|
Servlet getServlet() {
|
||||||
|
@ -78,4 +102,8 @@ public final class EndpointServlet {
|
||||||
return this.initParameters;
|
return this.initParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getLoadOnStartup() {
|
||||||
|
return this.loadOnStartup;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2018 the original author or authors.
|
* Copyright 2012-2019 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -75,6 +75,7 @@ public class ServletEndpointRegistrar implements ServletContextInitializer {
|
||||||
endpointServlet.getServlet());
|
endpointServlet.getServlet());
|
||||||
registration.addMapping(urlMapping);
|
registration.addMapping(urlMapping);
|
||||||
registration.setInitParameters(endpointServlet.getInitParameters());
|
registration.setInitParameters(endpointServlet.getInitParameters());
|
||||||
|
registration.setLoadOnStartup(endpointServlet.getLoadOnStartup());
|
||||||
logger.info("Registered '" + path + "' to " + name);
|
logger.info("Registered '" + path + "' to " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,32 @@ public class EndpointServletTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void withLoadOnStartupNotSetShouldReturnDefaultValue() {
|
||||||
|
EndpointServlet endpointServlet = new EndpointServlet(TestServlet.class);
|
||||||
|
assertThat(endpointServlet.getLoadOnStartup()).isEqualTo(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void withLoadOnStartupSetShouldReturnValue() {
|
||||||
|
final int loadOnStartupTestValue = 3;
|
||||||
|
EndpointServlet endpointServlet = new EndpointServlet(TestServlet.class)
|
||||||
|
.withLoadOnStartup(loadOnStartupTestValue);
|
||||||
|
assertThat(endpointServlet.getLoadOnStartup()).isEqualTo(loadOnStartupTestValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void withLoadOnStartupAndInitParamsShouldReturnValue() {
|
||||||
|
final int loadOnStartupTestValue = 9;
|
||||||
|
EndpointServlet endpointServlet = new EndpointServlet(TestServlet.class)
|
||||||
|
.withLoadOnStartup(loadOnStartupTestValue).withInitParameter("a", "b")
|
||||||
|
.withInitParameter("c", "d");
|
||||||
|
Map<String, String> extra = new LinkedHashMap<>();
|
||||||
|
extra.put("a", "b1");
|
||||||
|
extra.put("e", "f");
|
||||||
|
assertThat(endpointServlet.getLoadOnStartup()).isEqualTo(loadOnStartupTestValue);
|
||||||
|
}
|
||||||
|
|
||||||
private static class TestServlet extends GenericServlet {
|
private static class TestServlet extends GenericServlet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -120,6 +120,30 @@ public class ServletEndpointRegistrarTests {
|
||||||
verify(this.dynamic).setInitParameters(Collections.singletonMap("a", "b"));
|
verify(this.dynamic).setInitParameters(Collections.singletonMap("a", "b"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onStartupWhenHasLoadOnStartupShouldRegisterLoadOnStartup()
|
||||||
|
throws Exception {
|
||||||
|
final int loadOnStartupTestValue = 7;
|
||||||
|
ExposableServletEndpoint endpoint = mockEndpoint(
|
||||||
|
new EndpointServlet(TestServlet.class)
|
||||||
|
.withLoadOnStartup(loadOnStartupTestValue));
|
||||||
|
ServletEndpointRegistrar registrar = new ServletEndpointRegistrar("/actuator",
|
||||||
|
Collections.singleton(endpoint));
|
||||||
|
registrar.onStartup(this.servletContext);
|
||||||
|
verify(this.dynamic).setLoadOnStartup(loadOnStartupTestValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onStartupWhenHasNotLoadOnStartupShouldRegisterDefaultValue()
|
||||||
|
throws Exception {
|
||||||
|
ExposableServletEndpoint endpoint = mockEndpoint(
|
||||||
|
new EndpointServlet(TestServlet.class));
|
||||||
|
ServletEndpointRegistrar registrar = new ServletEndpointRegistrar("/actuator",
|
||||||
|
Collections.singleton(endpoint));
|
||||||
|
registrar.onStartup(this.servletContext);
|
||||||
|
verify(this.dynamic).setLoadOnStartup(-1);
|
||||||
|
}
|
||||||
|
|
||||||
private ExposableServletEndpoint mockEndpoint(EndpointServlet endpointServlet) {
|
private ExposableServletEndpoint mockEndpoint(EndpointServlet endpointServlet) {
|
||||||
ExposableServletEndpoint endpoint = mock(ExposableServletEndpoint.class);
|
ExposableServletEndpoint endpoint = mock(ExposableServletEndpoint.class);
|
||||||
given(endpoint.getEndpointId()).willReturn(EndpointId.of("test"));
|
given(endpoint.getEndpointId()).willReturn(EndpointId.of("test"));
|
||||||
|
|
Loading…
Reference in New Issue