12 changed files with 438 additions and 217 deletions
@ -1,216 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2012-present the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
|
|
||||||
package org.springframework.boot.autoconfigure; |
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets; |
|
||||||
import java.time.ZoneId; |
|
||||||
import java.util.concurrent.CountDownLatch; |
|
||||||
import java.util.concurrent.atomic.AtomicBoolean; |
|
||||||
|
|
||||||
import jakarta.validation.Configuration; |
|
||||||
import jakarta.validation.Validation; |
|
||||||
import org.apache.catalina.authenticator.NonLoginAuthenticator; |
|
||||||
import org.apache.tomcat.util.http.Rfc6265CookieProcessor; |
|
||||||
|
|
||||||
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; |
|
||||||
import org.springframework.boot.context.event.ApplicationFailedEvent; |
|
||||||
import org.springframework.boot.context.event.ApplicationReadyEvent; |
|
||||||
import org.springframework.boot.context.event.SpringApplicationEvent; |
|
||||||
import org.springframework.boot.context.logging.LoggingApplicationListener; |
|
||||||
import org.springframework.context.ApplicationListener; |
|
||||||
import org.springframework.core.NativeDetector; |
|
||||||
import org.springframework.core.Ordered; |
|
||||||
import org.springframework.format.support.DefaultFormattingConversionService; |
|
||||||
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; |
|
||||||
|
|
||||||
/** |
|
||||||
* {@link ApplicationListener} to trigger early initialization in a background thread of |
|
||||||
* time-consuming tasks. |
|
||||||
* <p> |
|
||||||
* Set the {@link #IGNORE_BACKGROUNDPREINITIALIZER_PROPERTY_NAME} system property to |
|
||||||
* {@code true} to disable this mechanism and let such initialization happen in the |
|
||||||
* foreground. |
|
||||||
* |
|
||||||
* @author Phillip Webb |
|
||||||
* @author Andy Wilkinson |
|
||||||
* @author Artsiom Yudovin |
|
||||||
* @author Sebastien Deleuze |
|
||||||
* @since 1.3.0 |
|
||||||
*/ |
|
||||||
public class BackgroundPreinitializer implements ApplicationListener<SpringApplicationEvent>, Ordered { |
|
||||||
|
|
||||||
/** |
|
||||||
* System property that instructs Spring Boot how to run pre initialization. When the |
|
||||||
* property is set to {@code true}, no pre-initialization happens and each item is |
|
||||||
* initialized in the foreground as it needs to. When the property is {@code false} |
|
||||||
* (default), pre initialization runs in a separate thread in the background. |
|
||||||
* @since 2.1.0 |
|
||||||
*/ |
|
||||||
public static final String IGNORE_BACKGROUNDPREINITIALIZER_PROPERTY_NAME = "spring.backgroundpreinitializer.ignore"; |
|
||||||
|
|
||||||
private static final AtomicBoolean preinitializationStarted = new AtomicBoolean(); |
|
||||||
|
|
||||||
private static final CountDownLatch preinitializationComplete = new CountDownLatch(1); |
|
||||||
|
|
||||||
private static final boolean ENABLED = !Boolean.getBoolean(IGNORE_BACKGROUNDPREINITIALIZER_PROPERTY_NAME) |
|
||||||
&& Runtime.getRuntime().availableProcessors() > 1; |
|
||||||
|
|
||||||
@Override |
|
||||||
public int getOrder() { |
|
||||||
return LoggingApplicationListener.DEFAULT_ORDER + 1; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void onApplicationEvent(SpringApplicationEvent event) { |
|
||||||
if (!ENABLED || NativeDetector.inNativeImage()) { |
|
||||||
return; |
|
||||||
} |
|
||||||
if (event instanceof ApplicationEnvironmentPreparedEvent |
|
||||||
&& preinitializationStarted.compareAndSet(false, true)) { |
|
||||||
performPreinitialization(); |
|
||||||
} |
|
||||||
if ((event instanceof ApplicationReadyEvent || event instanceof ApplicationFailedEvent) |
|
||||||
&& preinitializationStarted.get()) { |
|
||||||
try { |
|
||||||
preinitializationComplete.await(); |
|
||||||
} |
|
||||||
catch (InterruptedException ex) { |
|
||||||
Thread.currentThread().interrupt(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void performPreinitialization() { |
|
||||||
try { |
|
||||||
Thread thread = new Thread(new Runnable() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
runSafely(new ConversionServiceInitializer()); |
|
||||||
runSafely(new ValidationInitializer()); |
|
||||||
if (!runSafely(new MessageConverterInitializer())) { |
|
||||||
// If the MessageConverterInitializer fails to run, we still might
|
|
||||||
// be able to
|
|
||||||
// initialize Jackson
|
|
||||||
runSafely(new JacksonInitializer()); |
|
||||||
} |
|
||||||
runSafely(new CharsetInitializer()); |
|
||||||
runSafely(new TomcatInitializer()); |
|
||||||
runSafely(new JdkInitializer()); |
|
||||||
preinitializationComplete.countDown(); |
|
||||||
} |
|
||||||
|
|
||||||
boolean runSafely(Runnable runnable) { |
|
||||||
try { |
|
||||||
runnable.run(); |
|
||||||
return true; |
|
||||||
} |
|
||||||
catch (Throwable ex) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
}, "background-preinit"); |
|
||||||
thread.start(); |
|
||||||
} |
|
||||||
catch (Exception ex) { |
|
||||||
// This will fail on GAE where creating threads is prohibited. We can safely
|
|
||||||
// continue but startup will be slightly slower as the initialization will now
|
|
||||||
// happen on the main thread.
|
|
||||||
preinitializationComplete.countDown(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Early initializer for Spring MessageConverters. |
|
||||||
*/ |
|
||||||
private static final class MessageConverterInitializer implements Runnable { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
new AllEncompassingFormHttpMessageConverter(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Early initializer for jakarta.validation. |
|
||||||
*/ |
|
||||||
private static final class ValidationInitializer implements Runnable { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
Configuration<?> configuration = Validation.byDefaultProvider().configure(); |
|
||||||
configuration.buildValidatorFactory().getValidator(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Early initializer for Jackson. |
|
||||||
*/ |
|
||||||
@SuppressWarnings({ "removal", "deprecation" }) |
|
||||||
private static final class JacksonInitializer implements Runnable { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.json().build(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Early initializer for Spring's ConversionService. |
|
||||||
*/ |
|
||||||
private static final class ConversionServiceInitializer implements Runnable { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
new DefaultFormattingConversionService(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
private static final class CharsetInitializer implements Runnable { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
StandardCharsets.UTF_8.name(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
private static final class TomcatInitializer implements Runnable { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
new Rfc6265CookieProcessor(); |
|
||||||
new NonLoginAuthenticator(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
private static final class JdkInitializer implements Runnable { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() { |
|
||||||
ZoneId.systemDefault(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -0,0 +1,35 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
/** |
||||||
|
* Interface used to preinitialize in the background code that may otherwise cause a delay |
||||||
|
* when first called. Implementations should be registered in {@code spring.factories}. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
* @since 4.0.0 |
||||||
|
*/ |
||||||
|
@FunctionalInterface |
||||||
|
public interface BackgroundPreinitializer { |
||||||
|
|
||||||
|
/** |
||||||
|
* Perform any require preinitialization. |
||||||
|
* @throws Exception on any initialization error |
||||||
|
*/ |
||||||
|
void preinitialize() throws Exception; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,133 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
import java.util.concurrent.CountDownLatch; |
||||||
|
import java.util.concurrent.atomic.AtomicBoolean; |
||||||
|
|
||||||
|
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; |
||||||
|
import org.springframework.boot.context.event.ApplicationFailedEvent; |
||||||
|
import org.springframework.boot.context.event.ApplicationReadyEvent; |
||||||
|
import org.springframework.boot.context.event.SpringApplicationEvent; |
||||||
|
import org.springframework.boot.context.logging.LoggingApplicationListener; |
||||||
|
import org.springframework.context.ApplicationListener; |
||||||
|
import org.springframework.core.NativeDetector; |
||||||
|
import org.springframework.core.Ordered; |
||||||
|
import org.springframework.core.io.support.SpringFactoriesLoader; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link ApplicationListener} to trigger early initialization in a background thread of |
||||||
|
* time-consuming tasks. |
||||||
|
* <p> |
||||||
|
* Set the {@link #IGNORE_BACKGROUNDPREINITIALIZER_PROPERTY_NAME} system property to |
||||||
|
* {@code true} to disable this mechanism. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
* @author Andy Wilkinson |
||||||
|
* @author Artsiom Yudovin |
||||||
|
* @author Sebastien Deleuze |
||||||
|
* @see BackgroundPreinitializer |
||||||
|
*/ |
||||||
|
class BackgroundPreinitializingApplicationListener implements ApplicationListener<SpringApplicationEvent>, Ordered { |
||||||
|
|
||||||
|
/** |
||||||
|
* System property that instructs Spring Boot how to run pre initialization. When the |
||||||
|
* property is set to {@code true}, no pre-initialization happens and each item is |
||||||
|
* initialized in the foreground as it needs to. When the property is {@code false} |
||||||
|
* (default), pre initialization runs in a separate thread in the background. |
||||||
|
*/ |
||||||
|
public static final String IGNORE_BACKGROUNDPREINITIALIZER_PROPERTY_NAME = "spring.backgroundpreinitializer.ignore"; |
||||||
|
|
||||||
|
private static final AtomicBoolean started = new AtomicBoolean(); |
||||||
|
|
||||||
|
private static final CountDownLatch complete = new CountDownLatch(1); |
||||||
|
|
||||||
|
private final SpringFactoriesLoader factoriesLoader; |
||||||
|
|
||||||
|
private final boolean enabled; |
||||||
|
|
||||||
|
BackgroundPreinitializingApplicationListener() { |
||||||
|
this(SpringFactoriesLoader.forDefaultResourceLocation()); |
||||||
|
} |
||||||
|
|
||||||
|
BackgroundPreinitializingApplicationListener(SpringFactoriesLoader factoriesLoader) { |
||||||
|
this.factoriesLoader = factoriesLoader; |
||||||
|
this.enabled = !NativeDetector.inNativeImage() |
||||||
|
&& !Boolean.getBoolean(IGNORE_BACKGROUNDPREINITIALIZER_PROPERTY_NAME) |
||||||
|
&& Runtime.getRuntime().availableProcessors() > 1; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getOrder() { |
||||||
|
return LoggingApplicationListener.DEFAULT_ORDER + 1; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void onApplicationEvent(SpringApplicationEvent event) { |
||||||
|
if (!this.enabled) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (event instanceof ApplicationEnvironmentPreparedEvent && started.compareAndSet(false, true)) { |
||||||
|
preinitialize(); |
||||||
|
} |
||||||
|
if ((event instanceof ApplicationReadyEvent || event instanceof ApplicationFailedEvent) && started.get()) { |
||||||
|
try { |
||||||
|
complete.await(); |
||||||
|
} |
||||||
|
catch (InterruptedException ex) { |
||||||
|
Thread.currentThread().interrupt(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void preinitialize() { |
||||||
|
Runner runner = new Runner(this.factoriesLoader.load(BackgroundPreinitializer.class)); |
||||||
|
try { |
||||||
|
Thread thread = new Thread(runner, "background-preinit"); |
||||||
|
thread.start(); |
||||||
|
} |
||||||
|
catch (Exception ex) { |
||||||
|
// This will fail on Google App Engine where creating threads is
|
||||||
|
// prohibited. We can safely continue but startup will be slightly slower
|
||||||
|
// as the initialization will now happen on the main thread.
|
||||||
|
complete.countDown(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Runner thread to call the {@link BackgroundPreinitializer} instances. |
||||||
|
* |
||||||
|
* @param preinitializers the preinitializers |
||||||
|
*/ |
||||||
|
record Runner(List<BackgroundPreinitializer> preinitializers) implements Runnable { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
for (BackgroundPreinitializer preinitializer : this.preinitializers) { |
||||||
|
try { |
||||||
|
preinitializer.preinitialize(); |
||||||
|
} |
||||||
|
catch (Throwable ex) { |
||||||
|
} |
||||||
|
} |
||||||
|
complete.countDown(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link BackgroundPreinitializer} for commonly used charsets. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
final class CharsetsBackgroundPreinitializer implements BackgroundPreinitializer { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void preinitialize() throws Exception { |
||||||
|
StandardCharsets.UTF_8.name(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import org.springframework.core.convert.ConversionService; |
||||||
|
import org.springframework.format.support.DefaultFormattingConversionService; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link BackgroundPreinitializer} for Spring's {@link ConversionService}. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
final class ConversionServiceBackgroundPreinitializer implements BackgroundPreinitializer { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void preinitialize() throws Exception { |
||||||
|
new DefaultFormattingConversionService(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link JacksonBackgroundPreinitializer} for Jackson. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
@SuppressWarnings("removal") |
||||||
|
final class JacksonBackgroundPreinitializer implements BackgroundPreinitializer { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void preinitialize() throws Exception { |
||||||
|
Jackson2ObjectMapperBuilder.json().build(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import jakarta.validation.Configuration; |
||||||
|
import jakarta.validation.Validation; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link BackgroundPreinitializer} for jakarta.validation. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
final class JakartaValidationBackgroundPreinitializer implements BackgroundPreinitializer { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void preinitialize() throws Exception { |
||||||
|
Configuration<?> configuration = Validation.byDefaultProvider().configure(); |
||||||
|
configuration.buildValidatorFactory().getValidator(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import org.apache.activemq.artemis.spi.core.protocol.MessageConverter; |
||||||
|
|
||||||
|
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link BackgroundPreinitializer} Spring's {@link MessageConverter} implementations. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
final class MessageConverterBackgroundPreinitializer implements BackgroundPreinitializer { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void preinitialize() throws Exception { |
||||||
|
new AllEncompassingFormHttpMessageConverter(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import org.apache.catalina.authenticator.NonLoginAuthenticator; |
||||||
|
import org.apache.tomcat.util.http.Rfc6265CookieProcessor; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link BackgroundPreinitializer} for Tomcat. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
final class TomcatBackgroundPreinitializer implements BackgroundPreinitializer { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void preinitialize() throws Exception { |
||||||
|
new Rfc6265CookieProcessor(); |
||||||
|
new NonLoginAuthenticator(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
|
|
||||||
|
import java.time.ZoneId; |
||||||
|
|
||||||
|
/** |
||||||
|
* {@link BackgroundPreinitializer} for {@link ZoneId}. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
final class ZoneIdBackgroundPreinitializer implements BackgroundPreinitializer { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void preinitialize() throws Exception { |
||||||
|
ZoneId.systemDefault(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Capabilities to preinitialize code in the background to improve startup performance. |
||||||
|
*/ |
||||||
|
package org.springframework.boot.autoconfigure.preinitialize; |
||||||
Loading…
Reference in new issue