Merge branch '2.2.x' into 2.3.x

Closes gh-24009
This commit is contained in:
Andy Wilkinson
2020-11-03 14:04:08 +00:00
19 changed files with 75 additions and 77 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -16,7 +16,6 @@
package org.springframework.boot.autoconfigure.batch;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import org.springframework.batch.core.configuration.annotation.BatchConfigurer;
@@ -26,6 +25,7 @@ import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.support.SimpleJobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
import org.springframework.boot.context.properties.PropertyMapper;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@@ -40,7 +40,7 @@ import org.springframework.transaction.PlatformTransactionManager;
* @author Stephane Nicoll
* @since 1.0.0
*/
public class BasicBatchConfigurer implements BatchConfigurer {
public class BasicBatchConfigurer implements BatchConfigurer, InitializingBean {
private final BatchProperties properties;
@@ -90,7 +90,11 @@ public class BasicBatchConfigurer implements BatchConfigurer {
return this.jobExplorer;
}
@PostConstruct
@Override
public void afterPropertiesSet() {
initialize();
}
public void initialize() {
try {
this.transactionManager = buildTransactionManager();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -19,8 +19,6 @@ package org.springframework.boot.autoconfigure.freemarker;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -57,9 +55,9 @@ public class FreeMarkerAutoConfiguration {
public FreeMarkerAutoConfiguration(ApplicationContext applicationContext, FreeMarkerProperties properties) {
this.applicationContext = applicationContext;
this.properties = properties;
checkTemplateLocationExists();
}
@PostConstruct
public void checkTemplateLocationExists() {
if (logger.isWarnEnabled() && this.properties.isCheckTemplateLocation()) {
List<TemplateLocation> locations = getLocations();

View File

@@ -19,7 +19,6 @@ package org.springframework.boot.autoconfigure.groovy.template;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import javax.annotation.PostConstruct;
import javax.servlet.Servlet;
import groovy.text.markup.MarkupTemplateEngine;
@@ -77,9 +76,9 @@ public class GroovyTemplateAutoConfiguration {
public GroovyMarkupConfiguration(ApplicationContext applicationContext, GroovyTemplateProperties properties) {
this.applicationContext = applicationContext;
this.properties = properties;
checkTemplateLocationExists();
}
@PostConstruct
public void checkTemplateLocationExists() {
if (this.properties.isCheckTemplateLocation() && !isUsingGroovyAllJar()) {
TemplateLocation location = new TemplateLocation(this.properties.getResourceLoaderPath());

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -20,11 +20,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.annotation.PostConstruct;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -60,12 +59,13 @@ public class HypermediaHttpMessageConverterConfiguration {
* {@code Jackson2ModuleRegisteringBeanPostProcessor} has registered the converter and
* it is unordered.
*/
private static class HalMessageConverterSupportedMediaTypesCustomizer implements BeanFactoryAware {
private static class HalMessageConverterSupportedMediaTypesCustomizer
implements BeanFactoryAware, InitializingBean {
private volatile BeanFactory beanFactory;
@PostConstruct
void configureHttpMessageConverters() {
@Override
public void afterPropertiesSet() {
if (this.beanFactory instanceof ListableBeanFactory) {
configureHttpMessageConverters(((ListableBeanFactory) this.beanFactory)
.getBeansOfType(RequestMappingHandlerAdapter.class).values());

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.jdbc;
import java.sql.SQLException;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import com.zaxxer.hikari.HikariDataSource;
@@ -59,10 +58,10 @@ class DataSourceJmxConfiguration {
Hikari(DataSource dataSource, ObjectProvider<MBeanExporter> mBeanExporter) {
this.dataSource = dataSource;
this.mBeanExporter = mBeanExporter;
validateMBeans();
}
@PostConstruct
void validateMBeans() {
private void validateMBeans() {
HikariDataSource hikariDataSource = DataSourceUnwrapper.unwrap(this.dataSource, HikariDataSource.class);
if (hikariDataSource != null && hikariDataSource.isRegisterMbeans()) {
this.mBeanExporter.ifUnique((exporter) -> exporter.addExcludedBean("dataSource"));

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -19,7 +19,6 @@ package org.springframework.boot.autoconfigure.jersey;
import java.util.Collections;
import java.util.EnumSet;
import javax.annotation.PostConstruct;
import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -95,22 +94,11 @@ public class JerseyAutoConfiguration implements ServletContextAware {
private final ResourceConfig config;
private final ObjectProvider<ResourceConfigCustomizer> customizers;
public JerseyAutoConfiguration(JerseyProperties jersey, ResourceConfig config,
ObjectProvider<ResourceConfigCustomizer> customizers) {
this.jersey = jersey;
this.config = config;
this.customizers = customizers;
}
@PostConstruct
public void path() {
customize();
}
private void customize() {
this.customizers.orderedStream().forEach((customizer) -> customizer.customize(this.config));
customizers.orderedStream().forEach((customizer) -> customizer.customize(this.config));
}
@Bean

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -16,7 +16,6 @@
package org.springframework.boot.autoconfigure.mail;
import javax.annotation.PostConstruct;
import javax.mail.MessagingException;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -44,9 +43,9 @@ public class MailSenderValidatorAutoConfiguration {
public MailSenderValidatorAutoConfiguration(JavaMailSenderImpl mailSender) {
this.mailSender = mailSender;
validateConnection();
}
@PostConstruct
public void validateConnection() {
try {
this.mailSender.testConnection();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -16,8 +16,6 @@
package org.springframework.boot.autoconfigure.mustache;
import javax.annotation.PostConstruct;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Mustache.Collector;
import com.samskivert.mustache.Mustache.TemplateLoader;
@@ -57,9 +55,9 @@ public class MustacheAutoConfiguration {
public MustacheAutoConfiguration(MustacheProperties mustache, ApplicationContext applicationContext) {
this.mustache = mustache;
this.applicationContext = applicationContext;
checkTemplateLocationExists();
}
@PostConstruct
public void checkTemplateLocationExists() {
if (this.mustache.isCheckTemplateLocation()) {
TemplateLocation location = new TemplateLocation(this.mustache.getPrefix());

View File

@@ -20,8 +20,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.StringUtils;
@@ -35,7 +34,7 @@ import org.springframework.util.StringUtils;
* @since 2.0.0
*/
@ConfigurationProperties(prefix = "spring.security.oauth2.client")
public class OAuth2ClientProperties {
public class OAuth2ClientProperties implements InitializingBean {
/**
* OAuth provider details.
@@ -55,7 +54,11 @@ public class OAuth2ClientProperties {
return this.registration;
}
@PostConstruct
@Override
public void afterPropertiesSet() {
validate();
}
public void validate() {
getRegistration().values().forEach(this::validateRegistration);
}

View File

@@ -21,8 +21,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -223,10 +222,10 @@ public class SessionAutoConfiguration {
this.classLoader = applicationContext.getClassLoader();
this.sessionProperties = sessionProperties;
this.candidates = candidates;
checkAvailableImplementations();
}
@PostConstruct
void checkAvailableImplementations() {
private void checkAvailableImplementations() {
List<Class<?>> availableCandidates = new ArrayList<>();
for (String candidate : this.candidates) {
addCandidateIfAvailable(availableCandidates, candidate);
@@ -288,7 +287,7 @@ public class SessionAutoConfiguration {
/**
* Base class for validating that a (reactive) session repository bean exists.
*/
abstract static class AbstractSessionRepositoryValidator {
abstract static class AbstractSessionRepositoryValidator implements InitializingBean {
private final SessionProperties sessionProperties;
@@ -300,8 +299,8 @@ public class SessionAutoConfiguration {
this.sessionRepositoryProvider = sessionRepositoryProvider;
}
@PostConstruct
void checkSessionRepository() {
@Override
public void afterPropertiesSet() {
StoreType storeType = this.sessionProperties.getStoreType();
if (storeType != StoreType.NONE && this.sessionRepositoryProvider.getIfAvailable() == null
&& storeType != null) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -18,7 +18,6 @@ package org.springframework.boot.autoconfigure.thymeleaf;
import java.util.LinkedHashMap;
import javax.annotation.PostConstruct;
import javax.servlet.DispatcherType;
import com.github.mxab.thymeleaf.extras.dataattribute.dialect.DataAttributeDialect;
@@ -95,10 +94,10 @@ public class ThymeleafAutoConfiguration {
DefaultTemplateResolverConfiguration(ThymeleafProperties properties, ApplicationContext applicationContext) {
this.properties = properties;
this.applicationContext = applicationContext;
checkTemplateLocationExists();
}
@PostConstruct
void checkTemplateLocationExists() {
private void checkTemplateLocationExists() {
boolean checkTemplateLocation = this.properties.isCheckTemplateLocation();
if (checkTemplateLocation) {
TemplateLocation location = new TemplateLocation(this.properties.getPrefix());

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 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.
@@ -48,7 +48,7 @@ class SessionAutoConfigurationIntegrationTests extends AbstractSessionAutoConfig
void severalCandidatesWithNoSessionStore() {
this.contextRunner.withUserConfiguration(HazelcastConfiguration.class).run((context) -> {
assertThat(context).hasFailed();
assertThat(context).getFailure().hasCauseInstanceOf(NonUniqueSessionRepositoryException.class);
assertThat(context).getFailure().hasRootCauseInstanceOf(NonUniqueSessionRepositoryException.class);
assertThat(context).getFailure()
.hasMessageContaining("Multiple session repository candidates are available");
assertThat(context).getFailure()

View File

@@ -65,7 +65,7 @@ class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurationTest
void contextFailsIfMultipleStoresAreAvailable() {
this.contextRunner.run((context) -> {
assertThat(context).hasFailed();
assertThat(context).getFailure().hasCauseInstanceOf(NonUniqueSessionRepositoryException.class);
assertThat(context).getFailure().hasRootCauseInstanceOf(NonUniqueSessionRepositoryException.class);
assertThat(context).getFailure()
.hasMessageContaining("Multiple session repository candidates are available");
});