Remove code deprecated in 2.x and add since and forRemoval attributes

Closes gh-32548
Closes gh-32549
pull/29403/merge
Andy Wilkinson 2 years ago
parent 03b3a772c9
commit 51df7813a5

@ -149,12 +149,13 @@ public class MetricsProperties {
*/
private String metricName = "http.client.requests";
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@DeprecatedConfigurationProperty(replacement = "management.observations.http.client.requests.name")
public String getMetricName() {
return this.metricName;
}
@Deprecated(since = "3.0.0", forRemoval = true)
public void setMetricName(String metricName) {
this.metricName = metricName;
}

@ -20,7 +20,6 @@ import java.util.Map;
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
/**
* {@link ConfigurationProperties @ConfigurationProperties} for configuring Dynatrace
@ -56,28 +55,6 @@ public class DynatraceProperties extends StepRegistryProperties {
this.apiToken = apiToken;
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "management.dynatrace.metrics.export.v1.device-id")
public String getDeviceId() {
return this.v1.getDeviceId();
}
@Deprecated
public void setDeviceId(String deviceId) {
this.v1.setDeviceId(deviceId);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "management.dynatrace.metrics.export.v1.technology-type")
public String getTechnologyType() {
return this.v1.getTechnologyType();
}
@Deprecated
public void setTechnologyType(String technologyType) {
this.v1.setTechnologyType(technologyType);
}
public String getUri() {
return this.uri;
}
@ -86,17 +63,6 @@ public class DynatraceProperties extends StepRegistryProperties {
this.uri = uri;
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "management.dynatrace.metrics.export.v1.group")
public String getGroup() {
return this.v1.getGroup();
}
@Deprecated
public void setGroup(String group) {
this.v1.setGroup(group);
}
public V1 getV1() {
return this.v1;
}

@ -30,8 +30,6 @@ import io.prometheus.client.exemplars.ExemplarSampler;
import io.prometheus.client.exemplars.tracer.common.SpanContextSupplier;
import io.prometheus.client.exporter.BasicAuthHttpConnectionFactory;
import io.prometheus.client.exporter.PushGateway;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
@ -52,7 +50,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.log.LogMessage;
import org.springframework.util.StringUtils;
/**
@ -120,8 +117,6 @@ public class PrometheusMetricsExportAutoConfiguration {
@ConditionalOnProperty(prefix = "management.prometheus.metrics.export.pushgateway", name = "enabled")
public static class PrometheusPushGatewayConfiguration {
private static final Log logger = LogFactory.getLog(PrometheusPushGatewayConfiguration.class);
/**
* The fallback job name. We use 'spring' since there's a history of Prometheus
* spring integration defaulting to that name from when Prometheus integration
@ -132,7 +127,7 @@ public class PrometheusMetricsExportAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public PrometheusPushGatewayManager prometheusPushGatewayManager(CollectorRegistry collectorRegistry,
PrometheusProperties prometheusProperties, Environment environment) {
PrometheusProperties prometheusProperties, Environment environment) throws MalformedURLException {
PrometheusProperties.Pushgateway properties = prometheusProperties.getPushgateway();
Duration pushRate = properties.getPushRate();
String job = getJob(properties, environment);
@ -147,16 +142,9 @@ public class PrometheusMetricsExportAutoConfiguration {
shutdownOperation);
}
private PushGateway initializePushGateway(String url) {
try {
private PushGateway initializePushGateway(String url) throws MalformedURLException {
return new PushGateway(new URL(url));
}
catch (MalformedURLException ex) {
logger.warn(LogMessage
.format("Invalid PushGateway base url '%s': update your configuration to a valid URL", url));
return new PushGateway(url);
}
}
private String getJob(PrometheusProperties.Pushgateway properties, Environment environment) {
String job = properties.getJob();

@ -30,7 +30,7 @@ import org.springframework.http.client.observation.ClientHttpObservationConventi
*
* @author Brian Clozel
*/
@SuppressWarnings("deprecation")
@SuppressWarnings({ "removal" })
class ClientHttpObservationConventionAdapter implements ClientHttpObservationConvention {
private final String metricName;
@ -48,6 +48,7 @@ class ClientHttpObservationConventionAdapter implements ClientHttpObservationCon
}
@Override
@SuppressWarnings("deprecation")
public KeyValues getLowCardinalityKeyValues(ClientHttpObservationContext context) {
KeyValues keyValues = KeyValues.empty();
Iterable<Tag> tags = this.tagsProvider.getTags(context.getUriTemplate(), context.getCarrier(),

@ -32,7 +32,7 @@ import org.springframework.web.reactive.function.client.WebClient;
*
* @author Brian Clozel
*/
@SuppressWarnings("deprecation")
@SuppressWarnings({ "deprecation", "removal" })
class ClientObservationConventionAdapter implements ClientObservationConvention {
private static final String URI_TEMPLATE_ATTRIBUTE = WebClient.class.getName() + ".uriTemplate";

@ -62,7 +62,7 @@ public class HttpClientObservationsAutoConfiguration {
@Bean
@Order(0)
@SuppressWarnings("deprecation")
@SuppressWarnings("removal")
MeterFilter metricsHttpClientUriTagFilter(ObservationProperties observationProperties,
MetricsProperties metricsProperties) {
String metricName = metricsProperties.getWeb().getClient().getRequest().getMetricName();

@ -40,7 +40,7 @@ import org.springframework.web.client.RestTemplate;
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RestTemplate.class)
@ConditionalOnBean(RestTemplateBuilder.class)
@SuppressWarnings("deprecation")
@SuppressWarnings("removal")
class RestTemplateObservationConfiguration {
@Bean

@ -37,7 +37,7 @@ import org.springframework.web.reactive.function.client.WebClient;
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(WebClient.class)
@SuppressWarnings("deprecation")
@SuppressWarnings("removal")
class WebClientObservationConfiguration {
@Bean

@ -61,7 +61,7 @@ class CompositeHandlerAdapter implements HandlerAdapter {
}
@Override
@Deprecated
@Deprecated(since = "2.4.9", forRemoval = false)
@SuppressWarnings("deprecation")
public long getLastModified(HttpServletRequest request, Object handler) {
Optional<HandlerAdapter> adapter = getAdapter(handler);

@ -50,7 +50,7 @@ class DynatraceMetricsExportAutoConfigurationTests {
@Test
void failsWithADeviceIdWithoutAUri() {
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
.withPropertyValues("management.dynatrace.metrics.export.device-id:dev-1")
.withPropertyValues("management.dynatrace.metrics.export.v1.device-id:dev-1")
.run((context) -> assertThat(context).hasFailed());
}

@ -45,14 +45,6 @@ class DynatracePropertiesConfigAdapterTests {
assertThat(new DynatracePropertiesConfigAdapter(properties).apiToken()).isEqualTo("123ABC");
}
@Test
@Deprecated
void whenPropertiesDeviceIdIsSetAdapterDeviceIdReturnsIt() {
DynatraceProperties properties = new DynatraceProperties();
properties.setDeviceId("dev-1");
assertThat(new DynatracePropertiesConfigAdapter(properties).deviceId()).isEqualTo("dev-1");
}
@Test
void whenPropertiesV1DeviceIdIsSetAdapterDeviceIdReturnsIt() {
DynatraceProperties properties = new DynatraceProperties();
@ -60,14 +52,6 @@ class DynatracePropertiesConfigAdapterTests {
assertThat(new DynatracePropertiesConfigAdapter(properties).deviceId()).isEqualTo("dev-1");
}
@Test
@Deprecated
void whenPropertiesTechnologyTypeIsSetAdapterTechnologyTypeReturnsIt() {
DynatraceProperties properties = new DynatraceProperties();
properties.setTechnologyType("tech-1");
assertThat(new DynatracePropertiesConfigAdapter(properties).technologyType()).isEqualTo("tech-1");
}
@Test
void whenPropertiesV1TechnologyTypeIsSetAdapterTechnologyTypeReturnsIt() {
DynatraceProperties properties = new DynatraceProperties();
@ -75,14 +59,6 @@ class DynatracePropertiesConfigAdapterTests {
assertThat(new DynatracePropertiesConfigAdapter(properties).technologyType()).isEqualTo("tech-1");
}
@Test
@Deprecated
void whenPropertiesGroupIsSetAdapterGroupReturnsIt() {
DynatraceProperties properties = new DynatraceProperties();
properties.setGroup("group-1");
assertThat(new DynatracePropertiesConfigAdapter(properties).group()).isEqualTo("group-1");
}
@Test
void whenPropertiesV1GroupIsSetAdapterGroupReturnsIt() {
DynatraceProperties properties = new DynatraceProperties();
@ -90,14 +66,6 @@ class DynatracePropertiesConfigAdapterTests {
assertThat(new DynatracePropertiesConfigAdapter(properties).group()).isEqualTo("group-1");
}
@Test
@SuppressWarnings("deprecation")
void whenDeviceIdIsSetThenAdapterApiVersionIsV1() {
DynatraceProperties properties = new DynatraceProperties();
properties.setDeviceId("dev-1");
assertThat(new DynatracePropertiesConfigAdapter(properties).apiVersion()).isSameAs(DynatraceApiVersion.V1);
}
@Test
void whenV1DeviceIdIsSetThenAdapterApiVersionIsV1() {
DynatraceProperties properties = new DynatraceProperties();
@ -144,7 +112,6 @@ class DynatracePropertiesConfigAdapterTests {
}
@Test
@SuppressWarnings("deprecation")
void defaultValues() {
DynatraceProperties properties = new DynatraceProperties();
assertThat(properties.getApiToken()).isNull();
@ -156,9 +123,6 @@ class DynatracePropertiesConfigAdapterTests {
assertThat(properties.getV2().isEnrichWithDynatraceMetadata()).isTrue();
assertThat(properties.getV2().getDefaultDimensions()).isNull();
assertThat(properties.getV2().isUseDynatraceSummaryInstruments()).isTrue();
assertThat(properties.getDeviceId()).isNull();
assertThat(properties.getTechnologyType()).isEqualTo("java");
assertThat(properties.getGroup()).isNull();
}
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 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.
@ -30,13 +30,11 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
class DynatracePropertiesTests extends StepRegistryPropertiesTests {
@SuppressWarnings("deprecation")
@Test
void defaultValuesAreConsistent() {
DynatraceProperties properties = new DynatraceProperties();
DynatraceConfig config = (key) -> null;
assertStepRegistryDefaultValues(properties, config);
assertThat(properties.getTechnologyType()).isEqualTo(config.technologyType());
assertThat(properties.getV1().getTechnologyType()).isEqualTo(config.technologyType());
}

@ -181,18 +181,6 @@ class PrometheusMetricsExportAutoConfigurationTests {
.isInstanceOf(DefaultHttpConnectionFactory.class)));
}
@Test
@Deprecated
void withCustomLegacyPushGatewayURL(CapturedOutput output) {
this.contextRunner.withConfiguration(AutoConfigurations.of(ManagementContextAutoConfiguration.class))
.withPropertyValues("management.prometheus.metrics.export.pushgateway.enabled=true",
"management.prometheus.metrics.export.pushgateway.base-url=localhost:9090")
.withUserConfiguration(BaseConfiguration.class).run((context) -> {
assertThat(output).contains("Invalid PushGateway base url").contains("localhost:9090");
hasGatewayURL(context, "http://localhost:9090/metrics/");
});
}
@Test
void withCustomPushGatewayURL() {
this.contextRunner.withConfiguration(AutoConfigurations.of(ManagementContextAutoConfiguration.class))

@ -114,17 +114,6 @@ class DataSourcePoolMetricsAutoConfigurationTests {
});
}
@Test
@Deprecated
void autoConfiguredHikariDataSourceIsInstrumentedWhenUsingDeprecatedDataSourceInitialization() {
this.contextRunner.withPropertyValues("spring.datasource.schema:db/create-custom-schema.sql")
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class)).run((context) -> {
context.getBean(DataSource.class).getConnection();
MeterRegistry registry = context.getBean(MeterRegistry.class);
registry.get("hikaricp.connections").meter();
});
}
@Test
void autoConfiguredHikariDataSourceIsInstrumentedWhenUsingDataSourceInitialization() {
this.contextRunner.withPropertyValues("spring.sql.init.schema:db/create-custom-schema.sql").withConfiguration(

@ -39,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Brian Clozel
*/
@SuppressWarnings("deprecation")
@SuppressWarnings({ "deprecation", "removal" })
class ClientHttpObservationConventionAdapterTests {
private static final String TEST_METRIC_NAME = "test.metric.name";

@ -54,7 +54,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat
* @author Brian Clozel
*/
@ExtendWith(OutputCaptureExtension.class)
@SuppressWarnings("deprecation")
@SuppressWarnings({ "deprecation", "removal" })
class RestTemplateObservationConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().with(MetricsRun.simple())
@ -161,6 +161,7 @@ class RestTemplateObservationConfigurationTests {
}
@Deprecated(since = "3.0.0", forRemoval = true)
static class CustomTagsProvider implements RestTemplateExchangeTagsProvider {
@Override

@ -48,18 +48,6 @@ public class HealthEndpoint extends HealthEndpointSupport<HealthContributor, Hea
private static final String[] EMPTY_PATH = {};
/**
* Create a new {@link HealthEndpoint} instance.
* @param registry the health contributor registry
* @param groups the health endpoint groups
* @deprecated since 2.6.9 for removal in 3.0.0 in favor of
* {@link #HealthEndpoint(HealthContributorRegistry, HealthEndpointGroups, Duration)}
*/
@Deprecated
public HealthEndpoint(HealthContributorRegistry registry, HealthEndpointGroups groups) {
super(registry, groups, null);
}
/**
* Create a new {@link HealthEndpoint} instance.
* @param registry the health contributor registry

@ -50,18 +50,6 @@ public class HealthEndpointWebExtension extends HealthEndpointSupport<HealthCont
private static final String[] NO_PATH = {};
/**
* Create a new {@link HealthEndpointWebExtension} instance.
* @param registry the health contributor registry
* @param groups the health endpoint groups
* @deprecated since 2.6.9 for removal in 3.0.0 in favor of
* {@link #HealthEndpointWebExtension(HealthContributorRegistry, HealthEndpointGroups, Duration)}
*/
@Deprecated
public HealthEndpointWebExtension(HealthContributorRegistry registry, HealthEndpointGroups groups) {
super(registry, groups, null);
}
/**
* Create a new {@link HealthEndpointWebExtension} instance.
* @param registry the health contributor registry

@ -50,18 +50,6 @@ public class ReactiveHealthEndpointWebExtension
private static final String[] NO_PATH = {};
/**
* Create a new {@link ReactiveHealthEndpointWebExtension} instance.
* @param registry the health contributor registry
* @param groups the health endpoint groups
* @deprecated since 2.6.9 for removal in 3.0.0 in favor of
* {@link #ReactiveHealthEndpointWebExtension(ReactiveHealthContributorRegistry, HealthEndpointGroups, Duration)}
*/
@Deprecated
public ReactiveHealthEndpointWebExtension(ReactiveHealthContributorRegistry registry, HealthEndpointGroups groups) {
super(registry, groups, null);
}
/**
* Create a new {@link ReactiveHealthEndpointWebExtension} instance.
* @param registry the health contributor registry

@ -166,7 +166,7 @@ public class PrometheusPushGatewayManager {
* Perform a POST before shutdown.
* @deprecated since 3.0.0 for removal in 3.2.0 in favor of {@link #POST}.
*/
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
PUSH,
/**

@ -34,7 +34,8 @@ import org.springframework.util.StringUtils;
* @deprecated since 3.0.0 for removal in 3.2.0 in favor of
* {@link DefaultClientHttpObservationConvention}
*/
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@SuppressWarnings({ "deprecation", "removal" })
public class DefaultRestTemplateExchangeTagsProvider implements RestTemplateExchangeTagsProvider {
@Override

@ -41,7 +41,7 @@ import org.springframework.web.client.RestTemplate;
* @deprecated since 3.0.0 for removal in 3.2.0 in favor of
* {@link DefaultClientHttpObservationConvention}
*/
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
public final class RestTemplateExchangeTags {
private static final Pattern STRIP_URI_PATTERN = Pattern.compile("^https?://[^/]+/");

@ -33,7 +33,7 @@ import org.springframework.web.client.RestTemplate;
* {@link ClientHttpObservationConvention}
*/
@FunctionalInterface
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
public interface RestTemplateExchangeTagsProvider {
/**

@ -31,7 +31,7 @@ import org.springframework.web.reactive.function.client.ClientResponse;
* {@link org.springframework.web.reactive.function.client.ClientObservationConvention}
*/
@FunctionalInterface
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
public interface WebClientExchangeTagsProvider {
/**

@ -135,7 +135,8 @@ class PrometheusPushGatewayManagerTests {
}
@Test
@SuppressWarnings("deprecation")
@SuppressWarnings("removal")
@Deprecated(since = "3.0.0", forRemoval = true)
void shutdownWhenShutdownOperationIsPushPerformsPushAddOnShutdown() throws Exception {
givenScheduleAtFixedRateWithReturnFuture();
PrometheusPushGatewayManager manager = new PrometheusPushGatewayManager(this.pushGateway, this.registry,

@ -38,7 +38,8 @@ import static org.mockito.Mockito.mock;
* @author Nishant Raut
* @author Brian Clozel
*/
@SuppressWarnings("deprecation")
@SuppressWarnings({ "removal" })
@Deprecated(since = "3.0.0", forRemoval = true)
class RestTemplateExchangeTagsTests {
@Test

@ -21,14 +21,6 @@ import javax.sql.DataSource;
import org.jooq.ConnectionProvider;
import org.jooq.DSLContext;
import org.jooq.ExecuteListenerProvider;
import org.jooq.ExecutorProvider;
import org.jooq.RecordListenerProvider;
import org.jooq.RecordMapperProvider;
import org.jooq.RecordUnmapperProvider;
import org.jooq.TransactionListenerProvider;
import org.jooq.TransactionProvider;
import org.jooq.VisitListenerProvider;
import org.jooq.conf.Settings;
import org.jooq.impl.DataSourceConnectionProvider;
import org.jooq.impl.DefaultConfiguration;
import org.jooq.impl.DefaultDSLContext;
@ -45,7 +37,6 @@ import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfigu
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.transaction.PlatformTransactionManager;
@ -104,50 +95,6 @@ public class JooqAutoConfiguration {
return configuration;
}
@Bean
@Deprecated
public DefaultConfigurationCustomizer jooqProvidersDefaultConfigurationCustomizer(
ObjectProvider<TransactionProvider> transactionProvider,
ObjectProvider<RecordMapperProvider> recordMapperProvider,
ObjectProvider<RecordUnmapperProvider> recordUnmapperProvider, ObjectProvider<Settings> settings,
ObjectProvider<RecordListenerProvider> recordListenerProviders,
ObjectProvider<VisitListenerProvider> visitListenerProviders,
ObjectProvider<TransactionListenerProvider> transactionListenerProviders,
ObjectProvider<ExecutorProvider> executorProvider) {
return new OrderedDefaultConfigurationCustomizer((configuration) -> {
transactionProvider.ifAvailable(configuration::set);
recordMapperProvider.ifAvailable(configuration::set);
recordUnmapperProvider.ifAvailable(configuration::set);
settings.ifAvailable(configuration::set);
executorProvider.ifAvailable(configuration::set);
configuration.set(recordListenerProviders.orderedStream().toArray(RecordListenerProvider[]::new));
configuration.set(visitListenerProviders.orderedStream().toArray(VisitListenerProvider[]::new));
configuration.setTransactionListenerProvider(
transactionListenerProviders.orderedStream().toArray(TransactionListenerProvider[]::new));
});
}
}
private static class OrderedDefaultConfigurationCustomizer implements DefaultConfigurationCustomizer, Ordered {
private final DefaultConfigurationCustomizer delegate;
OrderedDefaultConfigurationCustomizer(DefaultConfigurationCustomizer delegate) {
this.delegate = delegate;
}
@Override
public void customize(DefaultConfiguration configuration) {
this.delegate.customize(configuration);
}
@Override
public int getOrder() {
return 0;
}
}
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 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.
@ -257,13 +257,13 @@ public class LiquibaseProperties {
this.labelFilter = labelFilter;
}
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@DeprecatedConfigurationProperty(replacement = "spring.liquibase.label-filter")
public String getLabels() {
return getLabelFilter();
}
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
public void setLabels(String labels) {
setLabelFilter(labels);
}

@ -22,7 +22,6 @@ import java.time.Duration;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.neo4j.driver.AuthToken;
@ -72,17 +71,13 @@ public class Neo4jAutoConfiguration {
}
URI determineServerUri(Neo4jProperties properties, Environment environment) {
return getOrFallback(properties.getUri(), () -> {
URI deprecatedProperty = environment.getProperty("spring.data.neo4j.uri", URI.class);
return (deprecatedProperty != null) ? deprecatedProperty : DEFAULT_SERVER_URI;
});
URI uri = properties.getUri();
return (uri != null) ? uri : DEFAULT_SERVER_URI;
}
AuthToken mapAuthToken(Neo4jProperties.Authentication authentication, Environment environment) {
String username = getOrFallback(authentication.getUsername(),
() -> environment.getProperty("spring.data.neo4j.username", String.class));
String password = getOrFallback(authentication.getPassword(),
() -> environment.getProperty("spring.data.neo4j.password", String.class));
String username = authentication.getUsername();
String password = authentication.getPassword();
String kerberosTicket = authentication.getKerberosTicket();
String realm = authentication.getRealm();
@ -103,13 +98,6 @@ public class Neo4jAutoConfiguration {
return AuthTokens.none();
}
private <T> T getOrFallback(T value, Supplier<T> fallback) {
if (value != null) {
return value;
}
return fallback.get();
}
Config mapDriverConfig(Neo4jProperties properties, List<ConfigBuilderCustomizer> customizers) {
Config.ConfigBuilder builder = Config.builder();
configurePoolSettings(builder, properties.getPool());

@ -1400,13 +1400,13 @@ public class ServerProperties {
this.initialBufferSize = initialBufferSize;
}
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@DeprecatedConfigurationProperty(reason = "Deprecated for removal in Reactor Netty")
public DataSize getMaxChunkSize() {
return this.maxChunkSize;
}
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
public void setMaxChunkSize(DataSize maxChunkSize) {
this.maxChunkSize = maxChunkSize;
}

@ -102,7 +102,7 @@ public class NettyWebServerFactoryCustomizer
}));
}
@SuppressWarnings("deprecation")
@SuppressWarnings({ "deprecation", "removal" })
private void maxChunkSize(PropertyMapper propertyMapper, HttpRequestDecoderSpec httpRequestDecoderSpec,
ServerProperties.Netty nettyProperties) {
propertyMapper.from(nettyProperties.getMaxChunkSize()).whenNonNull()

@ -175,7 +175,6 @@ public class WebMvcAutoConfiguration {
// Defined as a nested config to ensure WebMvcConfigurer is not read when not
// on the classpath
@SuppressWarnings("deprecation")
@Configuration(proxyBeanMethods = false)
@Import(EnableWebMvcConfiguration.class)
@EnableConfigurationProperties({ WebMvcProperties.class, WebProperties.class })
@ -212,7 +211,6 @@ public class WebMvcAutoConfiguration {
this.resourceHandlerRegistrationCustomizer = resourceHandlerRegistrationCustomizerProvider.getIfAvailable();
this.dispatcherServletPath = dispatcherServletPath;
this.servletRegistrations = servletRegistrations;
this.mvcProperties.checkConfiguration();
}
@Override
@ -246,9 +244,6 @@ public class WebMvcAutoConfiguration {
if (this.mvcProperties.getPathmatch()
.getMatchingStrategy() == WebMvcProperties.MatchingStrategy.ANT_PATH_MATCHER) {
configurer.setPathMatcher(new AntPathMatcher());
configurer.setUseSuffixPatternMatch(this.mvcProperties.getPathmatch().isUseSuffixPattern());
configurer.setUseRegisteredSuffixPatternMatch(
this.mvcProperties.getPathmatch().isUseRegisteredSuffixPattern());
this.dispatcherServletPath.ifAvailable((dispatcherPath) -> {
String servletUrlMapping = dispatcherPath.getServletUrlMapping();
if (servletUrlMapping.equals("/") && singleDispatcherServlet()) {
@ -268,7 +263,6 @@ public class WebMvcAutoConfiguration {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
WebMvcProperties.Contentnegotiation contentnegotiation = this.mvcProperties.getContentnegotiation();
configurer.favorPathExtension(contentnegotiation.isFavorPathExtension());
configurer.favorParameter(contentnegotiation.isFavorParameter());
if (contentnegotiation.getParameterName() != null) {
configurer.parameterName(contentnegotiation.getParameterName());
@ -417,7 +411,7 @@ public class WebMvcAutoConfiguration {
return adapter;
}
@SuppressWarnings("deprecation")
@SuppressWarnings({ "deprecation", "removal" })
private void setIgnoreDefaultModelOnRedirect(RequestMappingHandlerAdapter adapter) {
adapter.setIgnoreDefaultModelOnRedirect(
this.mvcProperties == null || this.mvcProperties.isIgnoreDefaultModelOnRedirect());
@ -460,7 +454,7 @@ public class WebMvcAutoConfiguration {
@Override
@Bean
@ConditionalOnMissingBean(name = DispatcherServlet.THEME_RESOLVER_BEAN_NAME)
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = false)
@SuppressWarnings("deprecation")
public org.springframework.web.servlet.ThemeResolver themeResolver() {
return super.themeResolver();

@ -22,7 +22,6 @@ import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
import org.springframework.boot.context.properties.IncompatibleConfigurationException;
import org.springframework.http.MediaType;
import org.springframework.util.Assert;
import org.springframework.validation.DefaultMessageCodesResolver;
@ -115,28 +114,17 @@ public class WebMvcProperties {
this.messageCodesResolverFormat = messageCodesResolverFormat;
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.mvc.format.date")
public String getDateFormat() {
return this.format.getDate();
}
@Deprecated
public void setDateFormat(String dateFormat) {
this.format.setDate(dateFormat);
}
public Format getFormat() {
return this.format;
}
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@DeprecatedConfigurationProperty(reason = "Deprecated for removal in Spring MVC")
public boolean isIgnoreDefaultModelOnRedirect() {
return this.ignoreDefaultModelOnRedirect;
}
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
public void setIgnoreDefaultModelOnRedirect(boolean ignoreDefaultModelOnRedirect) {
this.ignoreDefaultModelOnRedirect = ignoreDefaultModelOnRedirect;
}
@ -225,19 +213,6 @@ public class WebMvcProperties {
return this.pathmatch;
}
public void checkConfiguration() {
if (this.getPathmatch().getMatchingStrategy() == MatchingStrategy.PATH_PATTERN_PARSER) {
if (this.getPathmatch().isUseSuffixPattern()) {
throw new IncompatibleConfigurationException("spring.mvc.pathmatch.matching-strategy",
"spring.mvc.pathmatch.use-suffix-pattern");
}
if (this.getPathmatch().isUseRegisteredSuffixPattern()) {
throw new IncompatibleConfigurationException("spring.mvc.pathmatch.matching-strategy",
"spring.mvc.pathmatch.use-registered-suffix-pattern");
}
}
}
public static class Async {
/**
@ -351,13 +326,6 @@ public class WebMvcProperties {
public static class Contentnegotiation {
/**
* Whether the path extension in the URL path should be used to determine the
* requested media type. If enabled a request "/users.pdf" will be interpreted as
* a request for "application/pdf" regardless of the 'Accept' header.
*/
private boolean favorPathExtension = false;
/**
* Whether a request parameter ("format" by default) should be used to determine
* the requested media type.
@ -375,18 +343,6 @@ public class WebMvcProperties {
*/
private String parameterName;
@DeprecatedConfigurationProperty(
reason = "Use of path extensions for request mapping and for content negotiation is discouraged.")
@Deprecated
public boolean isFavorPathExtension() {
return this.favorPathExtension;
}
@Deprecated
public void setFavorPathExtension(boolean favorPathExtension) {
this.favorPathExtension = favorPathExtension;
}
public boolean isFavorParameter() {
return this.favorParameter;
}
@ -420,22 +376,6 @@ public class WebMvcProperties {
*/
private MatchingStrategy matchingStrategy = MatchingStrategy.PATH_PATTERN_PARSER;
/**
* Whether to use suffix pattern match (".*") when matching patterns to requests.
* If enabled a method mapped to "/users" also matches to "/users.*". Enabling
* this option is not compatible with the PathPatternParser matching strategy.
*/
private boolean useSuffixPattern = false;
/**
* Whether suffix pattern matching should work only against extensions registered
* with "spring.mvc.contentnegotiation.media-types.*". This is generally
* recommended to reduce ambiguity and to avoid issues such as when a "." appears
* in the path for other reasons. Enabling this option is not compatible with the
* PathPatternParser matching strategy.
*/
private boolean useRegisteredSuffixPattern = false;
public MatchingStrategy getMatchingStrategy() {
return this.matchingStrategy;
}
@ -444,30 +384,6 @@ public class WebMvcProperties {
this.matchingStrategy = matchingStrategy;
}
@DeprecatedConfigurationProperty(
reason = "Use of path extensions for request mapping and for content negotiation is discouraged.")
@Deprecated
public boolean isUseSuffixPattern() {
return this.useSuffixPattern;
}
@Deprecated
public void setUseSuffixPattern(boolean useSuffixPattern) {
this.useSuffixPattern = useSuffixPattern;
}
@DeprecatedConfigurationProperty(
reason = "Use of path extensions for request mapping and for content negotiation is discouraged.")
@Deprecated
public boolean isUseRegisteredSuffixPattern() {
return this.useRegisteredSuffixPattern;
}
@Deprecated
public void setUseRegisteredSuffixPattern(boolean useRegisteredSuffixPattern) {
this.useRegisteredSuffixPattern = useRegisteredSuffixPattern;
}
}
public static class Format {

@ -1034,7 +1034,7 @@
"description": "Login password of the server.",
"deprecation": {
"replacement": "spring.neo4j.authentication.password",
"level": "warning"
"level": "error"
}
},
{
@ -1059,7 +1059,7 @@
"description": "URI used by the driver. Auto-detected by default.",
"deprecation": {
"replacement": "spring.neo4j.uri",
"level": "warning"
"level": "error"
}
},
{
@ -1077,7 +1077,7 @@
"description": "Login user of the server.",
"deprecation": {
"replacement": "spring.neo4j.authentication.username",
"level": "warning"
"level": "error"
}
},
{
@ -2047,6 +2047,14 @@
"type": "java.lang.String",
"description": "Preferred JSON mapper to use for HTTP message conversion. By default, auto-detected according to the environment."
},
{
"name": "spring.mvc.date-format",
"type": "java.lang.String",
"description": "Date format to use, for example 'dd/MM/yyyy'.",
"deprecation": {
"level": "error"
}
},
{
"name": "spring.mvc.favicon.enabled",
"type": "java.lang.Boolean",

@ -24,14 +24,8 @@ import org.jooq.ConverterProvider;
import org.jooq.DSLContext;
import org.jooq.ExecuteListener;
import org.jooq.ExecuteListenerProvider;
import org.jooq.ExecutorProvider;
import org.jooq.RecordListenerProvider;
import org.jooq.RecordMapperProvider;
import org.jooq.RecordUnmapperProvider;
import org.jooq.SQLDialect;
import org.jooq.TransactionListenerProvider;
import org.jooq.TransactionalRunnable;
import org.jooq.VisitListenerProvider;
import org.jooq.impl.DataSourceConnectionProvider;
import org.jooq.impl.DefaultExecuteListenerProvider;
import org.junit.jupiter.api.Test;
@ -153,33 +147,6 @@ class JooqAutoConfigurationTests {
});
}
@Test
@Deprecated
void customProvidersArePickedUp() {
RecordMapperProvider recordMapperProvider = mock(RecordMapperProvider.class);
RecordUnmapperProvider recordUnmapperProvider = mock(RecordUnmapperProvider.class);
RecordListenerProvider recordListenerProvider = mock(RecordListenerProvider.class);
VisitListenerProvider visitListenerProvider = mock(VisitListenerProvider.class);
TransactionListenerProvider transactionListenerProvider = mock(TransactionListenerProvider.class);
ExecutorProvider executorProvider = mock(ExecutorProvider.class);
this.contextRunner.withUserConfiguration(JooqDataSourceConfiguration.class, TxManagerConfiguration.class)
.withBean(RecordMapperProvider.class, () -> recordMapperProvider)
.withBean(RecordUnmapperProvider.class, () -> recordUnmapperProvider)
.withBean(RecordListenerProvider.class, () -> recordListenerProvider)
.withBean(VisitListenerProvider.class, () -> visitListenerProvider)
.withBean(TransactionListenerProvider.class, () -> transactionListenerProvider)
.withBean(ExecutorProvider.class, () -> executorProvider).run((context) -> {
DSLContext dsl = context.getBean(DSLContext.class);
assertThat(dsl.configuration().recordMapperProvider()).isSameAs(recordMapperProvider);
assertThat(dsl.configuration().recordUnmapperProvider()).isSameAs(recordUnmapperProvider);
assertThat(dsl.configuration().executorProvider()).isSameAs(executorProvider);
assertThat(dsl.configuration().recordListenerProviders()).containsExactly(recordListenerProvider);
assertThat(dsl.configuration().visitListenerProviders()).containsExactly(visitListenerProvider);
assertThat(dsl.configuration().transactionListenerProviders())
.containsExactly(transactionListenerProvider);
});
}
@Test
void relaxedBindingOfSqlDialect() {
this.contextRunner.withUserConfiguration(JooqDataSourceConfiguration.class)

@ -303,7 +303,7 @@ class LiquibaseAutoConfigurationTests {
}
@Test
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
void overrideLabelFilterWithDeprecatedLabelsProperty() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
.withPropertyValues("spring.liquibase.labels:test, production").run(assertLiquibase(

@ -131,26 +131,6 @@ class Neo4jAutoConfigurationTests {
assertThat(determineServerUri(properties, new MockEnvironment())).isEqualTo(customUri);
}
@Test
@Deprecated
void determineServerUriWithDeprecatedPropertyShouldOverrideDefault() {
URI customUri = URI.create("bolt://localhost:4242");
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.uri", customUri.toString());
assertThat(determineServerUri(new Neo4jProperties(), environment)).isEqualTo(customUri);
}
@Test
@Deprecated
void determineServerUriWithCustomUriShouldTakePrecedenceOverDeprecatedProperty() {
URI customUri = URI.create("bolt://localhost:4242");
URI anotherCustomURI = URI.create("bolt://localhost:2424");
Neo4jProperties properties = new Neo4jProperties();
properties.setUri(customUri);
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.uri",
anotherCustomURI.toString());
assertThat(determineServerUri(properties, environment)).isEqualTo(customUri);
}
@Test
void authenticationShouldDefaultToNone() {
assertThat(mapAuthToken(new Authentication())).isEqualTo(AuthTokens.none());
@ -173,25 +153,6 @@ class Neo4jAutoConfigurationTests {
assertThat(mapAuthToken(authentication)).isEqualTo(AuthTokens.basic("Farin", "Urlaub", "Test Realm"));
}
@Test
@Deprecated
void authenticationWithUsernameUsingDeprecatedPropertiesShouldEnableBasicAuth() {
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.username", "user")
.withProperty("spring.data.neo4j.password", "secret");
assertThat(mapAuthToken(new Authentication(), environment)).isEqualTo(AuthTokens.basic("user", "secret"));
}
@Test
@Deprecated
void authenticationWithUsernameShouldTakePrecedenceOverDeprecatedPropertiesAndEnableBasicAuth() {
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.username", "user")
.withProperty("spring.data.neo4j.password", "secret");
Authentication authentication = new Authentication();
authentication.setUsername("Farin");
authentication.setPassword("Urlaub");
assertThat(mapAuthToken(authentication, environment)).isEqualTo(AuthTokens.basic("Farin", "Urlaub"));
}
@Test
void authenticationWithKerberosTicketShouldEnableKerberos() {
Authentication authentication = new Authentication();

@ -516,7 +516,8 @@ class ServerPropertiesTests {
}
@Test
@SuppressWarnings("deprecation")
@Deprecated(since = "3.0.0", forRemoval = true)
@SuppressWarnings("removal")
void nettyMaxChunkSizeMatchesHttpDecoderSpecDefault() {
assertThat(this.properties.getNetty().getMaxChunkSize().toBytes())
.isEqualTo(HttpDecoderSpec.DEFAULT_MAX_CHUNK_SIZE);

@ -147,12 +147,12 @@ class NettyWebServerFactoryCustomizerTests {
assertThat(decoder.maxInitialLineLength()).isEqualTo(nettyProperties.getMaxInitialLineLength().toBytes());
}
@SuppressWarnings("deprecation")
@SuppressWarnings("removal")
private void setMaxChunkSize(ServerProperties.Netty nettyProperties) {
nettyProperties.setMaxChunkSize(DataSize.ofKilobytes(16));
}
@SuppressWarnings("deprecation")
@SuppressWarnings({ "deprecation", "removal" })
private void assertMaxChunkSize(ServerProperties.Netty nettyProperties, HttpRequestDecoderSpec decoder) {
assertThat(decoder.maxChunkSize()).isEqualTo(nettyProperties.getMaxChunkSize().toBytes());
}

@ -46,7 +46,6 @@ import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguratio
import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
import org.springframework.boot.autoconfigure.validation.ValidatorAdapter;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter;
import org.springframework.boot.context.properties.IncompatibleConfigurationException;
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
import org.springframework.boot.test.context.runner.ContextConsumer;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
@ -70,7 +69,6 @@ import org.springframework.format.Printer;
import org.springframework.format.support.FormattingConversionService;
import org.springframework.http.CacheControl;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.util.ReflectionTestUtils;
@ -78,10 +76,8 @@ import org.springframework.util.StringUtils;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.accept.ContentNegotiationStrategy;
import org.springframework.web.accept.ParameterContentNegotiationStrategy;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.FormContentFilter;
@ -371,7 +367,7 @@ class WebMvcAutoConfigurationTests {
}
@Test
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@SuppressWarnings("deprecation")
void customThemeResolverWithMatchingNameReplacesDefaultThemeResolver() {
this.contextRunner.withBean("themeResolver", CustomThemeResolver.class, CustomThemeResolver::new)
@ -382,7 +378,7 @@ class WebMvcAutoConfigurationTests {
}
@Test
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@SuppressWarnings("deprecation")
void customThemeResolverWithDifferentNameDoesNotReplaceDefaultThemeResolver() {
this.contextRunner.withBean("customThemeResolver", CustomThemeResolver.class, CustomThemeResolver::new)
@ -430,15 +426,6 @@ class WebMvcAutoConfigurationTests {
});
}
@Test
void customDateFormatWithDeprecatedProperty() {
this.contextRunner.withPropertyValues("spring.mvc.date-format:dd*MM*yyyy").run((context) -> {
FormattingConversionService conversionService = context.getBean(FormattingConversionService.class);
Date date = Date.from(ZonedDateTime.of(1988, 6, 25, 20, 30, 0, 0, ZoneId.systemDefault()).toInstant());
assertThat(conversionService.convert(date, String.class)).isEqualTo("25*06*1988");
});
}
@Test
void defaultTimeFormat() {
this.contextRunner.run((context) -> {
@ -570,10 +557,9 @@ class WebMvcAutoConfigurationTests {
}
@Test
@Deprecated
void customMediaTypes() {
this.contextRunner.withPropertyValues("spring.mvc.contentnegotiation.media-types.yaml:text/yaml",
"spring.mvc.contentnegotiation.favor-path-extension:true").run((context) -> {
this.contextRunner.withPropertyValues("spring.mvc.contentnegotiation.media-types.yaml:text/yaml")
.run((context) -> {
RequestMappingHandlerAdapter adapter = context.getBean(RequestMappingHandlerAdapter.class);
ContentNegotiationManager contentNegotiationManager = (ContentNegotiationManager) ReflectionTestUtils
.getField(adapter, "contentNegotiationManager");
@ -841,29 +827,6 @@ class WebMvcAutoConfigurationTests {
}));
}
@Test
@SuppressWarnings("deprecation")
void defaultPathMatching() {
this.contextRunner.run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
assertThat(handlerMapping.useSuffixPatternMatch()).isFalse();
assertThat(handlerMapping.useRegisteredSuffixPatternMatch()).isFalse();
});
}
@Test
@Deprecated
@SuppressWarnings("deprecation")
void useSuffixPatternMatch() {
this.contextRunner.withPropertyValues("spring.mvc.pathmatch.matching-strategy=ant-path-matcher",
"spring.mvc.pathmatch.use-suffix-pattern:true",
"spring.mvc.pathmatch.use-registered-suffix-pattern:true").run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
assertThat(handlerMapping.useSuffixPatternMatch()).isTrue();
assertThat(handlerMapping.useRegisteredSuffixPatternMatch()).isTrue();
});
}
@Test
void usePathPatternParser() {
this.contextRunner.withPropertyValues("spring.mvc.pathmatch.matching-strategy:path_pattern_parser")
@ -873,15 +836,6 @@ class WebMvcAutoConfigurationTests {
});
}
@Test
void incompatiblePathMatchingConfiguration() {
this.contextRunner
.withPropertyValues("spring.mvc.pathmatch.matching-strategy:path_pattern_parser",
"spring.mvc.pathmatch.use-suffix-pattern:true")
.run((context) -> assertThat(context.getStartupFailure()).rootCause()
.isInstanceOf(IncompatibleConfigurationException.class));
}
@Test
void defaultContentNegotiation() {
this.contextRunner.run((context) -> {
@ -893,19 +847,6 @@ class WebMvcAutoConfigurationTests {
}
@Test
@Deprecated
void pathExtensionContentNegotiation() {
this.contextRunner.withPropertyValues("spring.mvc.contentnegotiation.favor-path-extension:true")
.run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
ContentNegotiationManager contentNegotiationManager = handlerMapping.getContentNegotiationManager();
assertThat(contentNegotiationManager.getStrategies()).hasAtLeastOneElementOfType(
WebMvcAutoConfiguration.OptionalPathExtensionContentNegotiationStrategy.class);
});
}
@Test
@Deprecated
void queryParameterContentNegotiation() {
this.contextRunner.withPropertyValues("spring.mvc.contentnegotiation.favor-parameter:true").run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
@ -925,21 +866,6 @@ class WebMvcAutoConfigurationTests {
});
}
@Test
@SuppressWarnings("deprecation")
void contentNegotiationStrategySkipsPathExtension() throws Exception {
ContentNegotiationStrategy delegate = mock(ContentNegotiationStrategy.class);
ContentNegotiationStrategy strategy = new WebMvcAutoConfiguration.OptionalPathExtensionContentNegotiationStrategy(
delegate);
MockHttpServletRequest request = new MockHttpServletRequest();
request.setAttribute(
org.springframework.web.accept.PathExtensionContentNegotiationStrategy.class.getName() + ".SKIP",
Boolean.TRUE);
ServletWebRequest webRequest = new ServletWebRequest(request);
List<MediaType> mediaTypes = strategy.resolveMediaTypes(webRequest);
assertThat(mediaTypes).containsOnly(MediaType.ALL);
}
@Test
void requestContextFilterIsAutoConfigured() {
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(RequestContextFilter.class));
@ -1485,7 +1411,7 @@ class WebMvcAutoConfigurationTests {
}
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
static class CustomThemeResolver implements org.springframework.web.servlet.ThemeResolver {
@Override

@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 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.
@ -22,7 +22,6 @@ import java.util.Map;
import org.assertj.core.util.Throwables;
import org.junit.jupiter.api.Test;
import org.springframework.boot.context.properties.IncompatibleConfigurationException;
import org.springframework.boot.context.properties.bind.BindException;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
@ -62,24 +61,6 @@ class WebMvcPropertiesTests {
(ex) -> assertThat(Throwables.getRootCause(ex)).hasMessage("Path must not contain wildcards"));
}
@Test
@SuppressWarnings("deprecation")
void incompatiblePathMatchSuffixConfig() {
this.properties.getPathmatch().setMatchingStrategy(WebMvcProperties.MatchingStrategy.PATH_PATTERN_PARSER);
this.properties.getPathmatch().setUseSuffixPattern(true);
assertThatExceptionOfType(IncompatibleConfigurationException.class)
.isThrownBy(this.properties::checkConfiguration);
}
@Test
@SuppressWarnings("deprecation")
void incompatiblePathMatchRegisteredSuffixConfig() {
this.properties.getPathmatch().setMatchingStrategy(WebMvcProperties.MatchingStrategy.PATH_PATTERN_PARSER);
this.properties.getPathmatch().setUseRegisteredSuffixPattern(true);
assertThatExceptionOfType(IncompatibleConfigurationException.class)
.isThrownBy(this.properties::checkConfiguration);
}
private void bind(String name, String value) {
bind(Collections.singletonMap(name, value));
}

@ -231,31 +231,6 @@ Most standard media types are supported out-of-the-box, but you can also define
Suffix pattern matching is deprecated and will be removed in a future release.
If you understand the caveats and would still like your application to use suffix pattern matching, the following configuration is required:
[source,yaml,indent=0,subs="verbatim",configblocks]
----
spring:
mvc:
contentnegotiation:
favor-path-extension: true
pathmatch:
use-suffix-pattern: true
----
Alternatively, rather than open all suffix patterns, it is more secure to only support registered suffix patterns:
[source,yaml,indent=0,subs="verbatim",configblocks]
----
spring:
mvc:
contentnegotiation:
favor-path-extension: true
pathmatch:
use-registered-suffix-pattern: true
----
As of Spring Framework 5.3, Spring MVC supports several implementation strategies for matching request paths to Controller handlers.
It was previously only supporting the `AntPathMatcher` strategy, but it now also offers `PathPatternParser`.
Spring Boot now provides a configuration property to choose and opt in the new strategy:
@ -271,11 +246,8 @@ Spring Boot now provides a configuration property to choose and opt in the new s
For more details on why you should consider this new implementation, see the
https://spring.io/blog/2020/06/30/url-matching-with-pathpattern-in-spring-mvc[dedicated blog post].
NOTE: `PathPatternParser` is an optimized implementation but restricts usage of
{spring-framework-docs}/web.html#mvc-ann-requestmapping-uri-templates[some path patterns variants]
and is incompatible with suffix pattern matching (configprop:spring.mvc.pathmatch.use-suffix-pattern[deprecated],
configprop:spring.mvc.pathmatch.use-registered-suffix-pattern[deprecated]) or mapping the `DispatcherServlet`
with a servlet prefix (configprop:spring.mvc.servlet.path[]).
NOTE: `PathPatternParser` is an optimized implementation but restricts usage of {spring-framework-docs}/web.html#mvc-ann-requestmapping-uri-templates[some path patterns variants].
It is incompatible with suffix pattern matching or mapping the `DispatcherServlet` with a servlet prefix (configprop:spring.mvc.servlet.path[]).

@ -38,7 +38,7 @@ import org.springframework.boot.test.autoconfigure.actuate.observability.AutoCon
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Deprecated
@Deprecated(since = "3.0.0", forRemoval = true)
@AutoConfigureObservability(tracing = false)
public @interface AutoConfigureMetrics {

@ -32,9 +32,10 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Chris Bono
*/
@SuppressWarnings("deprecation")
@SuppressWarnings("removal")
@SpringBootTest
@AutoConfigureMetrics
@Deprecated(since = "3.0.0", forRemoval = true)
class AutoConfigureMetricsPresentIntegrationTests {
@Test

@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2022 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.
@ -58,7 +58,7 @@ public interface ApplicationContextAssertProvider<C extends ApplicationContext>
* @deprecated to prevent accidental use. Prefer standard AssertJ
* {@code assertThat(context)...} calls instead.
*/
@Deprecated
@Deprecated(since = "2.0.0", forRemoval = false)
@Override
ApplicationContextAssert<C> assertThat();

@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 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.
@ -76,7 +76,7 @@ public final class JsonContent<T> implements AssertProvider<JsonContentAssert> {
* {@code assertThat(context)...} calls instead.
*/
@Override
@Deprecated
@Deprecated(since = "1.5.7", forRemoval = false)
public JsonContentAssert assertThat() {
return new JsonContentAssert(this.resourceLoadClass, null, this.json, this.configuration);
}

@ -103,7 +103,7 @@ public class ExplodedArchive implements Archive {
}
@Override
@Deprecated
@Deprecated(since = "2.3.10", forRemoval = false)
public Iterator<Entry> iterator() {
return new EntryIterator(this.root, this.recursive, null, null);
}
@ -322,7 +322,7 @@ public class ExplodedArchive implements Archive {
}
@Override
@Deprecated
@Deprecated(since = "2.3.10", forRemoval = false)
public Iterator<Entry> iterator() {
return Collections.emptyIterator();
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 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.
@ -97,7 +97,7 @@ public class JarFileArchive implements Archive {
}
@Override
@Deprecated
@Deprecated(since = "2.3.10", forRemoval = false)
public Iterator<Entry> iterator() {
return new EntryIterator(this.jarFile.iterator(), null, null);
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 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.
@ -59,10 +59,10 @@ abstract class AbstractArchiveIntegrationTests {
}
protected AssertProvider<JarAssert> jar(File file) {
return new AssertProvider<JarAssert>() {
return new AssertProvider<>() {
@Override
@Deprecated
@Deprecated(since = "2.3.0", forRemoval = false)
public JarAssert assertThat() {
return new JarAssert(file);
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 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.
@ -114,10 +114,10 @@ class BuildInfoIntegrationTests {
}
private AssertProvider<BuildInfoAssert> buildInfo(File project, String buildInfo) {
return new AssertProvider<BuildInfoAssert>() {
return new AssertProvider<>() {
@Override
@Deprecated
@Deprecated(since = "2.3.0", forRemoval = false)
public BuildInfoAssert assertThat() {
return new BuildInfoAssert(new File(project, buildInfo));
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 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.
@ -58,7 +58,7 @@ public class PropertiesMergingResourceTransformer implements ReproducibleResourc
}
@Override
@Deprecated
@Deprecated(since = "2.4.0", forRemoval = false)
public void processResource(String resource, InputStream inputStream, List<Relocator> relocators)
throws IOException {
processResource(resource, inputStream, relocators, 0);

@ -60,7 +60,7 @@ import org.springframework.util.ResourceUtils;
* @since 2.0.0
* @deprecated this class is meant for Spring Boot internal use only.
*/
@Deprecated
@Deprecated(since = "2.0.0", forRemoval = false)
public class SslServerCustomizer implements NettyServerCustomizer {
private final Ssl ssl;

Loading…
Cancel
Save