Merge pull request #14298 from ayudovin:make-possible-disable-backgroundpreinitializer

* pr/14298:
  Polish "Make it possible to disable the BackgroundPreinitializer"
  Make it possible to disable the BackgroundPreinitializer
pull/14304/merge
Stephane Nicoll 6 years ago
commit bf05238198

@ -39,15 +39,29 @@ import org.springframework.http.converter.support.AllEncompassingFormHttpMessage
/** /**
* {@link ApplicationListener} to trigger early initialization in a background thread of * {@link ApplicationListener} to trigger early initialization in a background thread of
* time consuming tasks. * time consuming tasks.
* <p>
* Set the {@value 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 Phillip Webb
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Artsiom Yudovin
* @since 1.3.0 * @since 1.3.0
*/ */
@Order(LoggingApplicationListener.DEFAULT_ORDER + 1) @Order(LoggingApplicationListener.DEFAULT_ORDER + 1)
public class BackgroundPreinitializer public class BackgroundPreinitializer
implements ApplicationListener<SpringApplicationEvent> { implements ApplicationListener<SpringApplicationEvent> {
/**
* System property that instructs Spring Boot how to run pre initialization. When the
* property is set to {@code true}, no pre intialization 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 AtomicBoolean preinitializationStarted = new AtomicBoolean(
false); false);
@ -55,7 +69,8 @@ public class BackgroundPreinitializer
@Override @Override
public void onApplicationEvent(SpringApplicationEvent event) { public void onApplicationEvent(SpringApplicationEvent event) {
if (event instanceof ApplicationStartingEvent if (!Boolean.getBoolean(IGNORE_BACKGROUNDPREINITIALIZER_PROPERTY_NAME)
&& event instanceof ApplicationStartingEvent
&& preinitializationStarted.compareAndSet(false, true)) { && preinitializationStarted.compareAndSet(false, true)) {
performPreinitialization(); performPreinitialization();
} }

Loading…
Cancel
Save