Remove deprecated code in Spring Boot 2.3

Closes gh-24806
pull/24851/head
Stephane Nicoll 4 years ago
commit 2de8c49d9f

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -93,17 +93,6 @@ public final class MeterValue {
return new MeterValue(DurationStyle.detectAndParse(value)); return new MeterValue(DurationStyle.detectAndParse(value));
} }
/**
* Return a new {@link MeterValue} instance for the given long value.
* @param value the source value
* @return a {@link MeterValue} instance
* @deprecated as of 2.3.0 in favor of {@link #valueOf(double)}
*/
@Deprecated
public static MeterValue valueOf(long value) {
return new MeterValue(value);
}
/** /**
* Return a new {@link MeterValue} instance for the given double value. * Return a new {@link MeterValue} instance for the given double value.
* @param value the source value * @param value the source value

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,7 +20,6 @@ import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
/** /**
@ -262,12 +261,6 @@ public class MetricsProperties {
return this.percentiles; return this.percentiles;
} }
@Deprecated
@DeprecatedConfigurationProperty(replacement = "management.metrics.distribution.slo")
public Map<String, ServiceLevelObjectiveBoundary[]> getSla() {
return this.slo;
}
public Map<String, ServiceLevelObjectiveBoundary[]> getSlo() { public Map<String, ServiceLevelObjectiveBoundary[]> getSlo() {
return this.slo; return this.slo;
} }

@ -1,72 +0,0 @@
/*
* 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.
* 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.actuate.autoconfigure.metrics;
import java.time.Duration;
import io.micrometer.core.instrument.Meter;
/**
* A boundary for a service-level agreement (SLA) for use when configuring Micrometer. Can
* be specified as either a {@link Long} (applicable to timers and distribution summaries)
* or a {@link Duration} (applicable to only timers).
*
* @author Phillip Webb
* @since 2.0.0
* @deprecated as of 2.3.0 in favor of {@link ServiceLevelObjectiveBoundary}
*/
@Deprecated
public final class ServiceLevelAgreementBoundary {
private final MeterValue value;
ServiceLevelAgreementBoundary(MeterValue value) {
this.value = value;
}
/**
* Return the underlying value of the SLA in form suitable to apply to the given meter
* type.
* @param meterType the meter type
* @return the value or {@code null} if the value cannot be applied
*/
public Long getValue(Meter.Type meterType) {
Double value = this.value.getValue(meterType);
return (value != null) ? value.longValue() : null;
}
/**
* Return a new {@link ServiceLevelAgreementBoundary} instance for the given long
* value.
* @param value the source value
* @return a {@link ServiceLevelAgreementBoundary} instance
*/
public static ServiceLevelAgreementBoundary valueOf(long value) {
return new ServiceLevelAgreementBoundary(MeterValue.valueOf(value));
}
/**
* Return a new {@link ServiceLevelAgreementBoundary} instance for the given String
* value.
* @param value the source value
* @return a {@link ServiceLevelAgreementBoundary} instance
*/
public static ServiceLevelAgreementBoundary valueOf(String value) {
return new ServiceLevelAgreementBoundary(MeterValue.valueOf(value));
}
}

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -203,15 +203,6 @@ class PropertiesMeterFilterTests {
.containsExactly(1, 1.5, 2); .containsExactly(1, 1.5, 2);
} }
@Test
@Deprecated
void configureWhenHasDeprecatedSlaShouldSetSlaToValue() {
PropertiesMeterFilter filter = new PropertiesMeterFilter(
createProperties("distribution.sla.spring.boot=1,2,3"));
assertThat(filter.configure(createMeterId("spring.boot"), DistributionStatisticConfig.DEFAULT)
.getServiceLevelObjectiveBoundaries()).containsExactly(1000000, 2000000, 3000000);
}
@Test @Test
void configureWhenHasSloShouldSetSloToValue() { void configureWhenHasSloShouldSetSloToValue() {
PropertiesMeterFilter filter = new PropertiesMeterFilter( PropertiesMeterFilter filter = new PropertiesMeterFilter(

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -128,13 +128,12 @@ class ManagementErrorEndpointTests {
} }
@Test @Test
void errorResponseWithDefaultErrorAttributesSubclassUsingDeprecatedApiAndDelegation() { void errorResponseWithDefaultErrorAttributesSubclassUsingDelegation() {
ErrorAttributes attributes = new DefaultErrorAttributes() { ErrorAttributes attributes = new DefaultErrorAttributes() {
@Override @Override
@SuppressWarnings("deprecation") public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) { Map<String, Object> response = super.getErrorAttributes(webRequest, options);
Map<String, Object> response = super.getErrorAttributes(webRequest, includeStackTrace);
response.put("error", "custom error"); response.put("error", "custom error");
response.put("custom", "value"); response.put("custom", "value");
response.remove("path"); response.remove("path");
@ -151,7 +150,7 @@ class ManagementErrorEndpointTests {
} }
@Test @Test
void errorResponseWithDefaultErrorAttributesSubclassUsingDeprecatedApiWithoutDelegation() { void errorResponseWithDefaultErrorAttributesSubclassWithoutDelegation() {
ErrorAttributes attributes = new DefaultErrorAttributes() { ErrorAttributes attributes = new DefaultErrorAttributes() {
@Override @Override

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -104,22 +104,6 @@ public class CachingOperationInvoker implements OperationInvoker {
return new CachedResponse(response, accessTime); return new CachedResponse(response, accessTime);
} }
/**
* Apply caching configuration when appropriate to the given invoker.
* @param invoker the invoker to wrap
* @param timeToLive the maximum time in milliseconds that a response can be cached
* @return a caching version of the invoker or the original instance if caching is not
* required
* @deprecated as of 2.3.0 to make it package-private in 2.4
*/
@Deprecated
public static OperationInvoker apply(OperationInvoker invoker, long timeToLive) {
if (timeToLive > 0) {
return new CachingOperationInvoker(invoker, timeToLive);
}
return invoker;
}
/** /**
* A cached response that encapsulates the response itself and the time at which it * A cached response that encapsulates the response itself and the time at which it
* was created. * was created.

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -94,30 +94,6 @@ public final class WebClientExchangeTags {
return CLIENT_ERROR; return CLIENT_ERROR;
} }
/**
* Creates a {@code status} {@code Tag} derived from the
* {@link ClientResponse#statusCode()} of the given {@code response}.
* @param response the response
* @return the status tag
* @deprecated since 2.3.0 in favor of {@link #status(ClientResponse, Throwable)}
*/
@Deprecated
public static Tag status(ClientResponse response) {
return Tag.of("status", String.valueOf(response.rawStatusCode()));
}
/**
* Creates a {@code status} {@code Tag} derived from the exception thrown by the
* client.
* @param throwable the exception
* @return the status tag
* @deprecated since 2.3.0 in favor of {@link #status(ClientResponse, Throwable)}
*/
@Deprecated
public static Tag status(Throwable throwable) {
return (throwable instanceof IOException) ? IO_ERROR : CLIENT_ERROR;
}
/** /**
* Create a {@code clientName} {@code Tag} derived from the * Create a {@code clientName} {@code Tag} derived from the
* {@link java.net.URI#getHost host} of the {@link ClientRequest#url() URL} of the * {@link java.net.URI#getHost host} of the {@link ClientRequest#url() URL} of the

@ -62,7 +62,6 @@ dependencies {
optional("org.apache.tomcat.embed:tomcat-embed-el") optional("org.apache.tomcat.embed:tomcat-embed-el")
optional("org.apache.tomcat.embed:tomcat-embed-websocket") optional("org.apache.tomcat.embed:tomcat-embed-websocket")
optional("org.apache.tomcat:tomcat-jdbc") optional("org.apache.tomcat:tomcat-jdbc")
optional("org.codehaus.btm:btm")
optional("org.codehaus.groovy:groovy-templates") optional("org.codehaus.groovy:groovy-templates")
optional("com.github.ben-manes.caffeine:caffeine") optional("com.github.ben-manes.caffeine:caffeine")
optional("com.github.mxab.thymeleaf.extras:thymeleaf-extras-data-attribute") optional("com.github.mxab.thymeleaf.extras:thymeleaf-extras-data-attribute")

@ -1,49 +0,0 @@
/*
* 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.
* 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.batch;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.boot.ApplicationRunner;
/**
* {@link ApplicationRunner} to {@link JobLauncher launch} Spring Batch jobs. Runs all
* jobs in the surrounding context by default. Can also be used to launch a specific job
* by providing a jobName.
*
* @author Dave Syer
* @author Jean-Pierre Bergamin
* @author Mahmoud Ben Hassine
* @since 1.0.0
* @deprecated since 2.3.0 in favor of {@link JobLauncherApplicationRunner}
*/
@Deprecated
public class JobLauncherCommandLineRunner extends JobLauncherApplicationRunner {
/**
* Create a new {@link JobLauncherCommandLineRunner}.
* @param jobLauncher to launch jobs
* @param jobExplorer to check the job repository for previous executions
* @param jobRepository to check if a job instance exists with the given parameters
* when running a job
*/
public JobLauncherCommandLineRunner(JobLauncher jobLauncher, JobExplorer jobExplorer, JobRepository jobRepository) {
super(jobLauncher, jobExplorer, jobRepository);
}
}

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -39,20 +39,16 @@ import org.springframework.util.ObjectUtils;
* Couchbase cache configuration. * Couchbase cache configuration.
* *
* @author Stephane Nicoll * @author Stephane Nicoll
* @since 1.4.0
* @deprecated since 2.3.3 as this class is not intended for public use. It will be made
* package-private in a future release
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ Cluster.class, CouchbaseClientFactory.class, CouchbaseCacheManager.class }) @ConditionalOnClass({ Cluster.class, CouchbaseClientFactory.class, CouchbaseCacheManager.class })
@ConditionalOnMissingBean(CacheManager.class) @ConditionalOnMissingBean(CacheManager.class)
@ConditionalOnSingleCandidate(CouchbaseClientFactory.class) @ConditionalOnSingleCandidate(CouchbaseClientFactory.class)
@Conditional(CacheCondition.class) @Conditional(CacheCondition.class)
@Deprecated class CouchbaseCacheConfiguration {
public class CouchbaseCacheConfiguration {
@Bean @Bean
public CouchbaseCacheManager cacheManager(CacheProperties cacheProperties, CacheManagerCustomizers customizers, CouchbaseCacheManager cacheManager(CacheProperties cacheProperties, CacheManagerCustomizers customizers,
ObjectProvider<CouchbaseCacheManagerBuilderCustomizer> couchbaseCacheManagerBuilderCustomizers, ObjectProvider<CouchbaseCacheManagerBuilderCustomizer> couchbaseCacheManagerBuilderCustomizers,
CouchbaseClientFactory clientFactory) { CouchbaseClientFactory clientFactory) {
List<String> cacheNames = cacheProperties.getCacheNames(); List<String> cacheNames = cacheProperties.getCacheNames();

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -24,7 +24,6 @@ import java.util.List;
import com.datastax.oss.driver.api.core.DefaultConsistencyLevel; import com.datastax.oss.driver.api.core.DefaultConsistencyLevel;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
/** /**
* Configuration properties for Cassandra. * Configuration properties for Cassandra.
@ -126,17 +125,6 @@ public class CassandraProperties {
this.sessionName = sessionName; this.sessionName = sessionName;
} }
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.data.cassandra.session-name")
public String getClusterName() {
return getSessionName();
}
@Deprecated
public void setClusterName(String clusterName) {
setSessionName(clusterName);
}
public List<String> getContactPoints() { public List<String> getContactPoints() {
return this.contactPoints; return this.contactPoints;
} }
@ -181,61 +169,6 @@ public class CassandraProperties {
this.compression = compression; this.compression = compression;
} }
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.data.cassandra.request.consistency")
public DefaultConsistencyLevel getConsistencyLevel() {
return getRequest().getConsistency();
}
@Deprecated
public void setConsistencyLevel(DefaultConsistencyLevel consistency) {
getRequest().setConsistency(consistency);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.data.cassandra.request.serial-consistency")
public DefaultConsistencyLevel getSerialConsistencyLevel() {
return getRequest().getSerialConsistency();
}
@Deprecated
public void setSerialConsistencyLevel(DefaultConsistencyLevel serialConsistency) {
getRequest().setSerialConsistency(serialConsistency);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.data.cassandra.request.page-size")
public int getFetchSize() {
return getRequest().getPageSize();
}
@Deprecated
public void setFetchSize(int fetchSize) {
getRequest().setPageSize(fetchSize);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.data.cassandra.connection.init-query-timeout")
public Duration getConnectTimeout() {
return getConnection().getInitQueryTimeout();
}
@Deprecated
public void setConnectTimeout(Duration connectTimeout) {
getConnection().setInitQueryTimeout(connectTimeout);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.data.cassandra.request.timeout")
public Duration getReadTimeout() {
return getRequest().getTimeout();
}
@Deprecated
public void setReadTimeout(Duration readTimeout) {
getRequest().setTimeout(readTimeout);
}
public boolean isSsl() { public boolean isSsl() {
return this.ssl; return this.ssl;
} }

@ -1,36 +0,0 @@
/*
* 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.
* 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.elasticsearch.rest;
import org.elasticsearch.client.RestClientBuilder;
/**
* Callback interface that can be implemented by beans wishing to further customize the
* {@link org.elasticsearch.client.RestClient} via a {@link RestClientBuilder} whilst
* retaining default auto-configuration.
*
* @author Brian Clozel
* @since 2.1.0
* @deprecated as of 2.3.1 in favor of
* {@link org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer}
*/
@FunctionalInterface
@Deprecated
public interface RestClientBuilderCustomizer
extends org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer {
}

@ -1,21 +0,0 @@
/*
* 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.
* 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.
*/
/**
* Deprecated auto-configuration for Elasticsearch client, superseded by classes in
* {@code org.springframework.boot.autoconfigure.elasticsearch}.
*/
package org.springframework.boot.autoconfigure.elasticsearch.rest;

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,8 +21,6 @@ import java.util.List;
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClients;
import org.springframework.core.env.Environment;
/** /**
* A factory for a blocking {@link MongoClient}. * A factory for a blocking {@link MongoClient}.
* *
@ -39,30 +37,6 @@ import org.springframework.core.env.Environment;
*/ */
public class MongoClientFactory extends MongoClientFactorySupport<MongoClient> { public class MongoClientFactory extends MongoClientFactorySupport<MongoClient> {
/**
* Construct a factory for creating a blocking {@link MongoClient}.
* @param properties configuration properties
* @param environment a Spring {@link Environment} containing configuration properties
* @deprecated since 2.3.0 in favor of {@link #MongoClientFactory(List)}
*/
@Deprecated
public MongoClientFactory(MongoProperties properties, Environment environment) {
this(null);
}
/**
* Construct a factory for creating a blocking {@link MongoClient}.
* @param properties configuration properties
* @param environment a Spring {@link Environment} containing configuration properties
* @param builderCustomizers a list of configuration settings customizers
* @deprecated since 2.4.0 in favor of {@link #MongoClientFactory(List)}
*/
@Deprecated
public MongoClientFactory(MongoProperties properties, Environment environment,
List<MongoClientSettingsBuilderCustomizer> builderCustomizers) {
this(builderCustomizers);
}
/** /**
* Construct a factory for creating a blocking {@link MongoClient}. * Construct a factory for creating a blocking {@link MongoClient}.
* @param builderCustomizers a list of configuration settings customizers * @param builderCustomizers a list of configuration settings customizers

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -24,8 +24,6 @@ import com.mongodb.MongoClientSettings;
import com.mongodb.MongoClientSettings.Builder; import com.mongodb.MongoClientSettings.Builder;
import com.mongodb.MongoDriverInformation; import com.mongodb.MongoDriverInformation;
import org.springframework.core.env.Environment;
/** /**
* Base class for setup that is common to MongoDB client factories. * Base class for setup that is common to MongoDB client factories.
* *
@ -40,13 +38,6 @@ public abstract class MongoClientFactorySupport<T> {
private final BiFunction<MongoClientSettings, MongoDriverInformation, T> clientCreator; private final BiFunction<MongoClientSettings, MongoDriverInformation, T> clientCreator;
@Deprecated
protected MongoClientFactorySupport(MongoProperties properties, Environment environment,
List<MongoClientSettingsBuilderCustomizer> builderCustomizers,
BiFunction<MongoClientSettings, MongoDriverInformation, T> clientCreator) {
this(builderCustomizers, clientCreator);
}
protected MongoClientFactorySupport(List<MongoClientSettingsBuilderCustomizer> builderCustomizers, protected MongoClientFactorySupport(List<MongoClientSettingsBuilderCustomizer> builderCustomizers,
BiFunction<MongoClientSettings, MongoDriverInformation, T> clientCreator) { BiFunction<MongoClientSettings, MongoDriverInformation, T> clientCreator) {
this.builderCustomizers = (builderCustomizers != null) ? builderCustomizers : Collections.emptyList(); this.builderCustomizers = (builderCustomizers != null) ? builderCustomizers : Collections.emptyList();

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,8 +21,6 @@ import java.util.List;
import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoClients;
import org.springframework.core.env.Environment;
/** /**
* A factory for a reactive {@link MongoClient}. * A factory for a reactive {@link MongoClient}.
* *
@ -33,19 +31,6 @@ import org.springframework.core.env.Environment;
*/ */
public class ReactiveMongoClientFactory extends MongoClientFactorySupport<MongoClient> { public class ReactiveMongoClientFactory extends MongoClientFactorySupport<MongoClient> {
/**
* Construct a factory for creating a {@link MongoClient}.
* @param properties configuration properties
* @param environment a Spring {@link Environment} containing configuration properties
* @param builderCustomizers a list of configuration settings customizers
* @deprecated since 2.4.0 in favor of {@link #ReactiveMongoClientFactory(List)}
*/
@Deprecated
public ReactiveMongoClientFactory(MongoProperties properties, Environment environment,
List<MongoClientSettingsBuilderCustomizer> builderCustomizers) {
super(properties, environment, builderCustomizers, MongoClients::create);
}
/** /**
* Construct a factory for creating a {@link MongoClient}. * Construct a factory for creating a {@link MongoClient}.
* @param builderCustomizers a list of configuration settings customizers * @param builderCustomizers a list of configuration settings customizers

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.security.saml2.provider.service.registration.Saml2MessageBinding; import org.springframework.security.saml2.provider.service.registration.Saml2MessageBinding;
@ -257,17 +256,6 @@ public class Saml2RelyingPartyProperties {
this.metadataUri = metadataUri; this.metadataUri = metadataUri;
} }
@Deprecated
@DeprecatedConfigurationProperty(reason = "moved to 'singlesignon.url'")
public String getSsoUrl() {
return this.singlesignon.getUrl();
}
@Deprecated
public void setSsoUrl(String ssoUrl) {
this.singlesignon.setUrl(ssoUrl);
}
public Singlesignon getSinglesignon() { public Singlesignon getSinglesignon() {
return this.singlesignon; return this.singlesignon;
} }

@ -1,121 +0,0 @@
/*
* 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.
* 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.transaction.jta;
import java.io.File;
import javax.jms.Message;
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
import bitronix.tm.BitronixTransactionManager;
import bitronix.tm.TransactionManagerServices;
import bitronix.tm.jndi.BitronixContext;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.jdbc.XADataSourceWrapper;
import org.springframework.boot.jms.XAConnectionFactoryWrapper;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.jta.JtaTransactionManager;
import org.springframework.util.StringUtils;
/**
* JTA Configuration for <A href="https://github.com/bitronix/btm">Bitronix</A>.
*
* @author Josh Long
* @author Phillip Webb
* @author Andy Wilkinson
* @author Kazuki Shimizu
* @deprecated since 2.3.0 as the Bitronix project is no longer being maintained
*/
@Deprecated
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(JtaProperties.class)
@ConditionalOnClass({ JtaTransactionManager.class, BitronixContext.class })
@ConditionalOnMissingBean(org.springframework.transaction.TransactionManager.class)
class BitronixJtaConfiguration {
@Bean
@ConditionalOnMissingBean
@ConfigurationProperties(prefix = "spring.jta.bitronix.properties")
bitronix.tm.Configuration bitronixConfiguration(JtaProperties jtaProperties) {
bitronix.tm.Configuration config = TransactionManagerServices.getConfiguration();
if (StringUtils.hasText(jtaProperties.getTransactionManagerId())) {
config.setServerId(jtaProperties.getTransactionManagerId());
}
File logBaseDir = getLogBaseDir(jtaProperties);
config.setLogPart1Filename(new File(logBaseDir, "part1.btm").getAbsolutePath());
config.setLogPart2Filename(new File(logBaseDir, "part2.btm").getAbsolutePath());
config.setDisableJmx(true);
return config;
}
private File getLogBaseDir(JtaProperties jtaProperties) {
if (StringUtils.hasLength(jtaProperties.getLogDir())) {
return new File(jtaProperties.getLogDir());
}
File home = new ApplicationHome().getDir();
return new File(home, "transaction-logs");
}
@Bean
@ConditionalOnMissingBean(TransactionManager.class)
BitronixTransactionManager bitronixTransactionManager(bitronix.tm.Configuration configuration) {
// Inject configuration to force ordering
return TransactionManagerServices.getTransactionManager();
}
@Bean
@ConditionalOnMissingBean(XADataSourceWrapper.class)
org.springframework.boot.jta.bitronix.BitronixXADataSourceWrapper xaDataSourceWrapper() {
return new org.springframework.boot.jta.bitronix.BitronixXADataSourceWrapper();
}
@Bean
@ConditionalOnMissingBean
static org.springframework.boot.jta.bitronix.BitronixDependentBeanFactoryPostProcessor bitronixDependentBeanFactoryPostProcessor() {
return new org.springframework.boot.jta.bitronix.BitronixDependentBeanFactoryPostProcessor();
}
@Bean
JtaTransactionManager transactionManager(UserTransaction userTransaction, TransactionManager transactionManager,
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(userTransaction, transactionManager);
transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(jtaTransactionManager));
return jtaTransactionManager;
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Message.class)
static class BitronixJtaJmsConfiguration {
@Bean
@ConditionalOnMissingBean(XAConnectionFactoryWrapper.class)
org.springframework.boot.jta.bitronix.BitronixXAConnectionFactoryWrapper xaConnectionFactoryWrapper() {
return new org.springframework.boot.jta.bitronix.BitronixXAConnectionFactoryWrapper();
}
}
}

@ -35,13 +35,12 @@ import org.springframework.context.annotation.Import;
* @author Nishant Raut * @author Nishant Raut
* @since 1.2.0 * @since 1.2.0
*/ */
@SuppressWarnings("deprecation")
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnClass(javax.transaction.Transaction.class) @ConditionalOnClass(javax.transaction.Transaction.class)
@ConditionalOnProperty(prefix = "spring.jta", value = "enabled", matchIfMissing = true) @ConditionalOnProperty(prefix = "spring.jta", value = "enabled", matchIfMissing = true)
@AutoConfigureBefore({ XADataSourceAutoConfiguration.class, ActiveMQAutoConfiguration.class, @AutoConfigureBefore({ XADataSourceAutoConfiguration.class, ActiveMQAutoConfiguration.class,
ArtemisAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) ArtemisAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
@Import({ JndiJtaConfiguration.class, BitronixJtaConfiguration.class, AtomikosJtaConfiguration.class }) @Import({ JndiJtaConfiguration.class, AtomikosJtaConfiguration.class })
public class JtaAutoConfiguration { public class JtaAutoConfiguration {
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -101,6 +101,28 @@ public class ErrorProperties {
return this.whitelabel; return this.whitelabel;
} }
/**
* Include Stacktrace attribute options.
*/
public enum IncludeStacktrace {
/**
* Never add stacktrace information.
*/
NEVER,
/**
* Always add stacktrace information.
*/
ALWAYS,
/**
* Add error attribute when the appropriate request parameter is "true".
*/
ON_PARAM
}
/** /**
* Include error attributes options. * Include error attributes options.
*/ */

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -31,7 +31,6 @@ import java.util.Map;
import io.undertow.UndertowOptions; import io.undertow.UndertowOptions;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.boot.convert.DurationUnit; import org.springframework.boot.convert.DurationUnit;
import org.springframework.boot.web.server.Compression; import org.springframework.boot.web.server.Compression;
@ -411,28 +410,6 @@ public class ServerProperties {
*/ */
private final Remoteip remoteip = new Remoteip(); private final Remoteip remoteip = new Remoteip();
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.tomcat.threads.max")
public int getMaxThreads() {
return getThreads().getMax();
}
@Deprecated
public void setMaxThreads(int maxThreads) {
getThreads().setMax(maxThreads);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.tomcat.threads.min-spare")
public int getMinSpareThreads() {
return getThreads().getMinSpare();
}
@Deprecated
public void setMinSpareThreads(int minSpareThreads) {
getThreads().setMinSpare(minSpareThreads);
}
public DataSize getMaxHttpFormPostSize() { public DataSize getMaxHttpFormPostSize() {
return this.maxHttpFormPostSize; return this.maxHttpFormPostSize;
} }
@ -465,72 +442,6 @@ public class ServerProperties {
this.basedir = basedir; this.basedir = basedir;
} }
@DeprecatedConfigurationProperty(replacement = "server.tomcat.remoteip.internal-proxies")
@Deprecated
public String getInternalProxies() {
return this.remoteip.getInternalProxies();
}
@Deprecated
public void setInternalProxies(String internalProxies) {
this.remoteip.setInternalProxies(internalProxies);
}
@DeprecatedConfigurationProperty(replacement = "server.tomcat.remoteip.protocol-header")
@Deprecated
public String getProtocolHeader() {
return this.remoteip.getProtocolHeader();
}
@Deprecated
public void setProtocolHeader(String protocolHeader) {
this.remoteip.setProtocolHeader(protocolHeader);
}
@DeprecatedConfigurationProperty(replacement = "server.tomcat.remoteip.protocol-header-https-value")
@Deprecated
public String getProtocolHeaderHttpsValue() {
return this.remoteip.getProtocolHeaderHttpsValue();
}
@Deprecated
public void setProtocolHeaderHttpsValue(String protocolHeaderHttpsValue) {
this.remoteip.setProtocolHeaderHttpsValue(protocolHeaderHttpsValue);
}
@DeprecatedConfigurationProperty(replacement = "server.tomcat.remoteip.host-header")
@Deprecated
public String getHostHeader() {
return this.remoteip.getHostHeader();
}
@Deprecated
public void setHostHeader(String hostHeader) {
this.remoteip.setHostHeader(hostHeader);
}
@DeprecatedConfigurationProperty(replacement = "server.tomcat.remote.port-header")
@Deprecated
public String getPortHeader() {
return this.remoteip.getPortHeader();
}
@Deprecated
public void setPortHeader(String portHeader) {
this.remoteip.setPortHeader(portHeader);
}
@DeprecatedConfigurationProperty(replacement = "server.tomcat.remoteip.remote-ip-header")
@Deprecated
public String getRemoteIpHeader() {
return this.remoteip.getRemoteIpHeader();
}
@Deprecated
public void setRemoteIpHeader(String remoteIpHeader) {
this.remoteip.setRemoteIpHeader(remoteIpHeader);
}
public Boolean getRedirectContextRoot() { public Boolean getRedirectContextRoot() {
return this.redirectContextRoot; return this.redirectContextRoot;
} }
@ -539,11 +450,6 @@ public class ServerProperties {
this.redirectContextRoot = redirectContextRoot; this.redirectContextRoot = redirectContextRoot;
} }
@Deprecated
public Boolean getUseRelativeRedirects() {
return this.useRelativeRedirects;
}
public boolean isUseRelativeRedirects() { public boolean isUseRelativeRedirects() {
return this.useRelativeRedirects; return this.useRelativeRedirects;
} }
@ -552,11 +458,6 @@ public class ServerProperties {
this.useRelativeRedirects = useRelativeRedirects; this.useRelativeRedirects = useRelativeRedirects;
} }
@Deprecated
public void setUseRelativeRedirects(Boolean useRelativeRedirects) {
this.useRelativeRedirects = (useRelativeRedirects != null) ? useRelativeRedirects : false;
}
public Charset getUriEncoding() { public Charset getUriEncoding() {
return this.uriEncoding; return this.uriEncoding;
} }
@ -1093,72 +994,6 @@ public class ServerProperties {
this.maxHttpFormPostSize = maxHttpFormPostSize; this.maxHttpFormPostSize = maxHttpFormPostSize;
} }
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.acceptors")
public Integer getAcceptors() {
return getThreads().getAcceptors();
}
@Deprecated
public void setAcceptors(Integer acceptors) {
getThreads().setAcceptors(acceptors);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.selectors")
public Integer getSelectors() {
return getThreads().getSelectors();
}
@Deprecated
public void setSelectors(Integer selectors) {
getThreads().setSelectors(selectors);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.min")
public Integer getMinThreads() {
return getThreads().getMin();
}
@Deprecated
public void setMinThreads(Integer minThreads) {
getThreads().setMin(minThreads);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.max")
public Integer getMaxThreads() {
return getThreads().getMax();
}
@Deprecated
public void setMaxThreads(Integer maxThreads) {
getThreads().setMax(maxThreads);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.max-queue-capacity")
public Integer getMaxQueueCapacity() {
return getThreads().getMaxQueueCapacity();
}
@Deprecated
public void setMaxQueueCapacity(Integer maxQueueCapacity) {
getThreads().setMaxQueueCapacity(maxQueueCapacity);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.idle-timeout")
public Duration getThreadIdleTimeout() {
return getThreads().getIdleTimeout();
}
@Deprecated
public void setThreadIdleTimeout(Duration threadIdleTimeout) {
getThreads().setIdleTimeout(threadIdleTimeout);
}
public Duration getConnectionIdleTimeout() { public Duration getConnectionIdleTimeout() {
return this.connectionIdleTimeout; return this.connectionIdleTimeout;
} }
@ -1579,28 +1414,6 @@ public class ServerProperties {
this.bufferSize = bufferSize; this.bufferSize = bufferSize;
} }
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.undertow.threads.io")
public Integer getIoThreads() {
return getThreads().getIo();
}
@Deprecated
public void setIoThreads(Integer ioThreads) {
getThreads().setIo(ioThreads);
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "server.undertow.threads.worker")
public Integer getWorkerThreads() {
return getThreads().getWorker();
}
@Deprecated
public void setWorkerThreads(Integer workerThreads) {
getThreads().setWorker(workerThreads);
}
public Boolean getDirectBuffers() { public Boolean getDirectBuffers() {
return this.directBuffers; return this.directBuffers;
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -46,18 +46,6 @@ public class WebConversionService extends DefaultFormattingConversionService {
private static final boolean JSR_354_PRESENT = ClassUtils.isPresent("javax.money.MonetaryAmount", private static final boolean JSR_354_PRESENT = ClassUtils.isPresent("javax.money.MonetaryAmount",
WebConversionService.class.getClassLoader()); WebConversionService.class.getClassLoader());
/**
* Create a new WebConversionService that configures formatters with the provided date
* format, or register the default ones if no custom format is provided.
* @param dateFormat the custom date format to use for date conversions
* @deprecated since 2.3.0 in favor of
* {@link #WebConversionService(DateTimeFormatters)}
*/
@Deprecated
public WebConversionService(String dateFormat) {
this(new DateTimeFormatters().dateFormat(dateFormat));
}
/** /**
* Create a new WebConversionService that configures formatters with the provided * Create a new WebConversionService that configures formatters with the provided
* date, time, and date-time formats, or registers the default if no custom format is * date, time, and date-time formats, or registers the default if no custom format is

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -17,7 +17,6 @@
package org.springframework.boot.autoconfigure.web.reactive; package org.springframework.boot.autoconfigure.web.reactive;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
/** /**
@ -62,17 +61,6 @@ public class WebFluxProperties {
return candidate; return candidate;
} }
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.webflux.format.date")
public String getDateFormat() {
return this.format.getDate();
}
@Deprecated
public void setDateFormat(String dateFormat) {
this.format.setDate(dateFormat);
}
public Format getFormat() { public Format getFormat() {
return this.format; return this.format;
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -25,7 +25,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.web.error.ErrorAttributeOptions; import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.error.ErrorAttributeOptions.Include;
import org.springframework.boot.web.servlet.error.ErrorAttributes; import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.AnnotationAwareOrderComparator;
@ -70,20 +69,6 @@ public abstract class AbstractErrorController implements ErrorController {
return sorted; return sorted;
} }
/**
* Returns a {@link Map} of the error attributes.
* @param request the source request
* @param includeStackTrace if stack trace elements should be included
* @return the error attributes
* @deprecated since 2.3.0 in favor of
* {@link #getErrorAttributes(HttpServletRequest, ErrorAttributeOptions)}
*/
@Deprecated
protected Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) {
return getErrorAttributes(request,
(includeStackTrace) ? ErrorAttributeOptions.of(Include.STACK_TRACE) : ErrorAttributeOptions.defaults());
}
protected Map<String, Object> getErrorAttributes(HttpServletRequest request, ErrorAttributeOptions options) { protected Map<String, Object> getErrorAttributes(HttpServletRequest request, ErrorAttributeOptions options) {
WebRequest webRequest = new ServletWebRequest(request); WebRequest webRequest = new ServletWebRequest(request);
return this.errorAttributes.getErrorAttributes(webRequest, options); return this.errorAttributes.getErrorAttributes(webRequest, options);

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -81,12 +81,6 @@ public class BasicErrorController extends AbstractErrorController {
this.errorProperties = errorProperties; this.errorProperties = errorProperties;
} }
@Override
@Deprecated
public String getErrorPath() {
return null;
}
@RequestMapping(produces = MediaType.TEXT_HTML_VALUE) @RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) { public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
HttpStatus status = getStatus(request); HttpStatus status = getStatus(request);

@ -1041,119 +1041,6 @@
"name": "spring.jpa.open-in-view", "name": "spring.jpa.open-in-view",
"defaultValue": true "defaultValue": true
}, },
{
"name": "spring.jta.bitronix.properties.allow-multiple-lrc",
"description": "Whether to allow multiple LRC resources to be enlisted into the same transaction.",
"defaultValue": false
},
{
"name": "spring.jta.bitronix.properties.asynchronous2-pc",
"description": "Whether to enable asynchronously execution of two phase commit.",
"defaultValue": false
},
{
"name": "spring.jta.bitronix.properties.background-recovery-interval",
"description": "Interval in minutes at which to run the recovery process in the background.",
"defaultValue": 1,
"deprecation": {
"replacement": "spring.jta.bitronix.properties.background-recovery-interval-seconds"
}
},
{
"name": "spring.jta.bitronix.properties.background-recovery-interval-seconds",
"description": "Interval in seconds at which to run the recovery process in the background.",
"defaultValue": 60
},
{
"name": "spring.jta.bitronix.properties.current-node-only-recovery",
"description": "Whether to recover only the current node. Should be enabled if you run multiple instances of the transaction manager on the same JMS and JDBC resources.",
"defaultValue": true
},
{
"name": "spring.jta.bitronix.properties.debug-zero-resource-transaction",
"description": "Whether to log the creation and commit call stacks of transactions executed without a single enlisted resource.",
"defaultValue": false
},
{
"name": "spring.jta.bitronix.properties.default-transaction-timeout",
"description": "Default transaction timeout, in seconds.",
"defaultValue": 60
},
{
"name": "spring.jta.bitronix.properties.disable-jmx",
"description": "Whether to enable JMX support.",
"defaultValue": false
},
{
"name": "spring.jta.bitronix.properties.exception-analyzer",
"description": "Set the fully qualified name of the exception analyzer implementation to use."
},
{
"name": "spring.jta.bitronix.properties.filter-log-status",
"description": "Whether to enable filtering of logs so that only mandatory logs are written.",
"defaultValue": false
},
{
"name": "spring.jta.bitronix.properties.force-batching-enabled",
"description": "Whether disk forces are batched.",
"defaultValue": true
},
{
"name": "spring.jta.bitronix.properties.forced-write-enabled",
"description": "Whether logs are forced to disk.",
"defaultValue": true
},
{
"name": "spring.jta.bitronix.properties.graceful-shutdown-interval",
"description": "Maximum amount of seconds the TM waits for transactions to get done before aborting them at shutdown time.",
"defaultValue": 60
},
{
"name": "spring.jta.bitronix.properties.jndi-transaction-synchronization-registry-name",
"description": "JNDI name of the TransactionSynchronizationRegistry."
},
{
"name": "spring.jta.bitronix.properties.jndi-user-transaction-name",
"description": "JNDI name of the UserTransaction."
},
{
"name": "spring.jta.bitronix.properties.journal",
"description": "Name of the journal. Can be 'disk', 'null', or a class name.",
"defaultValue": "disk"
},
{
"name": "spring.jta.bitronix.properties.log-part1-filename",
"description": "Name of the first fragment of the journal.",
"defaultValue": "btm1.tlog"
},
{
"name": "spring.jta.bitronix.properties.log-part2-filename",
"description": "Name of the second fragment of the journal.",
"defaultValue": "btm2.tlog"
},
{
"name": "spring.jta.bitronix.properties.max-log-size-in-mb",
"description": "Maximum size in megabytes of the journal fragments.",
"defaultValue": 2
},
{
"name": "spring.jta.bitronix.properties.resource-configuration-filename",
"description": "ResourceLoader configuration file name."
},
{
"name": "spring.jta.bitronix.properties.server-id",
"description": "ASCII ID that must uniquely identify this TM instance. Defaults to the machine's IP address."
},
{
"name": "spring.jta.bitronix.properties.skip-corrupted-logs",
"description": "Skip corrupted transactions log entries. Use only at last resort when all you have to recover is a pair of corrupted files.",
"defaultValue": false
},
{
"name": "spring.jta.bitronix.properties.warn-about-zero-resource-transaction",
"description": "Whether to log a warning for transactions executed without a single enlisted resource.",
"defaultValue": true
},
{ {
"name": "spring.jta.enabled", "name": "spring.jta.enabled",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -107,16 +107,6 @@ class ElasticsearchRestClientAutoConfigurationTests {
}); });
} }
@Test
@Deprecated
void configureWhenDeprecatedBuilderCustomizerShouldApply() {
this.contextRunner.withUserConfiguration(DeprecatedBuilderCustomizerConfiguration.class).run((context) -> {
assertThat(context).hasSingleBean(RestHighLevelClient.class);
RestHighLevelClient restClient = context.getBean(RestHighLevelClient.class);
assertThat(restClient.getLowLevelClient()).hasFieldOrPropertyWithValue("pathPrefix", "/deprecated");
});
}
@Test @Test
void configureWithNoTimeoutsApplyDefaults() { void configureWithNoTimeoutsApplyDefaults() {
this.contextRunner.run((context) -> { this.contextRunner.run((context) -> {
@ -296,17 +286,6 @@ class ElasticsearchRestClientAutoConfigurationTests {
} }
@Configuration(proxyBeanMethods = false)
@Deprecated
static class DeprecatedBuilderCustomizerConfiguration {
@Bean
org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientBuilderCustomizer myCustomizer() {
return (builder) -> builder.setPathPrefix("/deprecated");
}
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
static class CustomRestHighLevelClientConfiguration { static class CustomRestHighLevelClientConfiguration {

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -39,16 +39,6 @@ class Saml2RelyingPartyPropertiesTests {
private final Saml2RelyingPartyProperties properties = new Saml2RelyingPartyProperties(); private final Saml2RelyingPartyProperties properties = new Saml2RelyingPartyProperties();
@Deprecated
@Test
void customizeSsoUrlDeprecated() {
bind("spring.security.saml2.relyingparty.registration.simplesamlphp.identity-provider.sso-url",
"https://simplesaml-for-spring-saml/SSOService.php");
assertThat(
this.properties.getRegistration().get("simplesamlphp").getIdentityprovider().getSinglesignon().getUrl())
.isEqualTo("https://simplesaml-for-spring-saml/SSOService.php");
}
@Test @Test
void customizeSsoUrl() { void customizeSsoUrl() {
bind("spring.security.saml2.relyingparty.registration.simplesamlphp.identity-provider.single-sign-on.url", bind("spring.security.saml2.relyingparty.registration.simplesamlphp.identity-provider.single-sign-on.url",

@ -18,8 +18,6 @@ package org.springframework.boot.autoconfigure.transaction.jta;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.Path; import java.nio.file.Path;
import javax.jms.ConnectionFactory; import javax.jms.ConnectionFactory;
@ -29,7 +27,6 @@ import javax.jms.XAConnectionFactory;
import javax.jms.XASession; import javax.jms.XASession;
import javax.sql.DataSource; import javax.sql.DataSource;
import javax.sql.XADataSource; import javax.sql.XADataSource;
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction; import javax.transaction.UserTransaction;
import javax.transaction.xa.XAResource; import javax.transaction.xa.XAResource;
@ -67,7 +64,6 @@ import static org.mockito.Mockito.mock;
* @author Kazuki Shimizu * @author Kazuki Shimizu
* @author Nishant Raut * @author Nishant Raut
*/ */
// @SuppressWarnings("deprecation")
class JtaAutoConfigurationTests { class JtaAutoConfigurationTests {
private AnnotationConfigApplicationContext context; private AnnotationConfigApplicationContext context;
@ -111,37 +107,6 @@ class JtaAutoConfigurationTests {
this.context.getBean(JtaTransactionManager.class); this.context.getBean(JtaTransactionManager.class);
} }
@Test
@Deprecated
void bitronixSanityCheck() {
this.context = new AnnotationConfigApplicationContext(JtaProperties.class, BitronixJtaConfiguration.class);
this.context.getBean(bitronix.tm.Configuration.class);
this.context.getBean(TransactionManager.class);
this.context.getBean(XADataSourceWrapper.class);
this.context.getBean(XAConnectionFactoryWrapper.class);
this.context.getBean(org.springframework.boot.jta.bitronix.BitronixDependentBeanFactoryPostProcessor.class);
this.context.getBean(JtaTransactionManager.class);
}
@Test
@Deprecated
void defaultBitronixServerId() throws UnknownHostException {
this.context = new AnnotationConfigApplicationContext(BitronixJtaConfiguration.class);
String serverId = this.context.getBean(bitronix.tm.Configuration.class).getServerId();
assertThat(serverId).isEqualTo(InetAddress.getLocalHost().getHostAddress());
}
@Test
@Deprecated
void customBitronixServerId() {
this.context = new AnnotationConfigApplicationContext();
TestPropertyValues.of("spring.jta.transactionManagerId:custom").applyTo(this.context);
this.context.register(BitronixJtaConfiguration.class);
this.context.refresh();
String serverId = this.context.getBean(bitronix.tm.Configuration.class).getServerId();
assertThat(serverId).isEqualTo("custom");
}
@Test @Test
void defaultAtomikosTransactionManagerName(@TempDir Path dir) throws IOException { void defaultAtomikosTransactionManagerName(@TempDir Path dir) throws IOException {
this.context = new AnnotationConfigApplicationContext(); this.context = new AnnotationConfigApplicationContext();
@ -166,20 +131,6 @@ class JtaAutoConfigurationTests {
assertThat(connectionFactory.getMaxPoolSize()).isEqualTo(10); assertThat(connectionFactory.getMaxPoolSize()).isEqualTo(10);
} }
@Test
@Deprecated
void bitronixConnectionFactoryPoolConfiguration() {
this.context = new AnnotationConfigApplicationContext();
TestPropertyValues.of("spring.jta.bitronix.connectionfactory.minPoolSize:5",
"spring.jta.bitronix.connectionfactory.maxPoolSize:10").applyTo(this.context);
this.context.register(BitronixJtaConfiguration.class, PoolConfiguration.class);
this.context.refresh();
org.springframework.boot.jta.bitronix.PoolingConnectionFactoryBean connectionFactory = this.context
.getBean(org.springframework.boot.jta.bitronix.PoolingConnectionFactoryBean.class);
assertThat(connectionFactory.getMinPoolSize()).isEqualTo(5);
assertThat(connectionFactory.getMaxPoolSize()).isEqualTo(10);
}
@Test @Test
void atomikosDataSourcePoolConfiguration() { void atomikosDataSourcePoolConfiguration() {
this.context = new AnnotationConfigApplicationContext(); this.context = new AnnotationConfigApplicationContext();
@ -193,21 +144,6 @@ class JtaAutoConfigurationTests {
assertThat(dataSource.getMaxPoolSize()).isEqualTo(10); assertThat(dataSource.getMaxPoolSize()).isEqualTo(10);
} }
@Test
@Deprecated
void bitronixDataSourcePoolConfiguration() {
this.context = new AnnotationConfigApplicationContext();
TestPropertyValues
.of("spring.jta.bitronix.datasource.minPoolSize:5", "spring.jta.bitronix.datasource.maxPoolSize:10")
.applyTo(this.context);
this.context.register(BitronixJtaConfiguration.class, PoolConfiguration.class);
this.context.refresh();
org.springframework.boot.jta.bitronix.PoolingDataSourceBean dataSource = this.context
.getBean(org.springframework.boot.jta.bitronix.PoolingDataSourceBean.class);
assertThat(dataSource.getMinPoolSize()).isEqualTo(5);
assertThat(dataSource.getMaxPoolSize()).isEqualTo(10);
}
@Test @Test
void atomikosCustomizeJtaTransactionManagerUsingProperties() { void atomikosCustomizeJtaTransactionManagerUsingProperties() {
this.context = new AnnotationConfigApplicationContext(); this.context = new AnnotationConfigApplicationContext();
@ -221,20 +157,6 @@ class JtaAutoConfigurationTests {
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue(); assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
} }
@Test
@Deprecated
void bitronixCustomizeJtaTransactionManagerUsingProperties() {
this.context = new AnnotationConfigApplicationContext();
TestPropertyValues
.of("spring.transaction.default-timeout:30", "spring.transaction.rollback-on-commit-failure:true")
.applyTo(this.context);
this.context.register(BitronixJtaConfiguration.class, TransactionAutoConfiguration.class);
this.context.refresh();
JtaTransactionManager transactionManager = this.context.getBean(JtaTransactionManager.class);
assertThat(transactionManager.getDefaultTimeout()).isEqualTo(30);
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
static class CustomTransactionManagerConfig { static class CustomTransactionManagerConfig {

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -216,105 +216,48 @@ class ServerPropertiesTests {
assertThat(this.properties.getTomcat().getThreads().getMax()).isEqualTo(10); assertThat(this.properties.getTomcat().getThreads().getMax()).isEqualTo(10);
} }
@Deprecated
@Test
void testCustomizeTomcatMaxThreadsDeprecated() {
bind("server.tomcat.maxThreads", "10");
assertThat(this.properties.getTomcat().getThreads().getMax()).isEqualTo(10);
}
@Test @Test
void testCustomizeTomcatMinSpareThreads() { void testCustomizeTomcatMinSpareThreads() {
bind("server.tomcat.threads.min-spare", "10"); bind("server.tomcat.threads.min-spare", "10");
assertThat(this.properties.getTomcat().getThreads().getMinSpare()).isEqualTo(10); assertThat(this.properties.getTomcat().getThreads().getMinSpare()).isEqualTo(10);
} }
@Deprecated
@Test
void testCustomizeTomcatMinSpareThreadsDeprecated() {
bind("server.tomcat.min-spare-threads", "10");
assertThat(this.properties.getTomcat().getThreads().getMinSpare()).isEqualTo(10);
}
@Test @Test
void testCustomizeJettyAcceptors() { void testCustomizeJettyAcceptors() {
bind("server.jetty.threads.acceptors", "10"); bind("server.jetty.threads.acceptors", "10");
assertThat(this.properties.getJetty().getThreads().getAcceptors()).isEqualTo(10); assertThat(this.properties.getJetty().getThreads().getAcceptors()).isEqualTo(10);
} }
@Deprecated
@Test
void testCustomizeJettyAcceptorsDeprecated() {
bind("server.jetty.acceptors", "10");
assertThat(this.properties.getJetty().getThreads().getAcceptors()).isEqualTo(10);
}
@Test @Test
void testCustomizeJettySelectors() { void testCustomizeJettySelectors() {
bind("server.jetty.threads.selectors", "10"); bind("server.jetty.threads.selectors", "10");
assertThat(this.properties.getJetty().getThreads().getSelectors()).isEqualTo(10); assertThat(this.properties.getJetty().getThreads().getSelectors()).isEqualTo(10);
} }
@Deprecated
@Test
void testCustomizeJettySelectorsDeprecated() {
bind("server.jetty.selectors", "10");
assertThat(this.properties.getJetty().getSelectors()).isEqualTo(10);
assertThat(this.properties.getJetty().getThreads().getSelectors()).isEqualTo(10);
}
@Test @Test
void testCustomizeJettyMaxThreads() { void testCustomizeJettyMaxThreads() {
bind("server.jetty.threads.max", "10"); bind("server.jetty.threads.max", "10");
assertThat(this.properties.getJetty().getThreads().getMax()).isEqualTo(10); assertThat(this.properties.getJetty().getThreads().getMax()).isEqualTo(10);
} }
@Deprecated
@Test
void testCustomizeJettyMaxThreadsDeprecated() {
bind("server.jetty.maxThreads", "10");
assertThat(this.properties.getJetty().getThreads().getMax()).isEqualTo(10);
}
@Test @Test
void testCustomizeJettyMinThreads() { void testCustomizeJettyMinThreads() {
bind("server.jetty.threads.min", "10"); bind("server.jetty.threads.min", "10");
assertThat(this.properties.getJetty().getThreads().getMin()).isEqualTo(10); assertThat(this.properties.getJetty().getThreads().getMin()).isEqualTo(10);
} }
@Deprecated
@Test
void testCustomizeJettyMinThreadsDeprecated() {
bind("server.jetty.minThreads", "10");
assertThat(this.properties.getJetty().getThreads().getMin()).isEqualTo(10);
}
@Test @Test
void testCustomizeJettyIdleTimeout() { void testCustomizeJettyIdleTimeout() {
bind("server.jetty.threads.idle-timeout", "10s"); bind("server.jetty.threads.idle-timeout", "10s");
assertThat(this.properties.getJetty().getThreads().getIdleTimeout()).isEqualTo(Duration.ofSeconds(10)); assertThat(this.properties.getJetty().getThreads().getIdleTimeout()).isEqualTo(Duration.ofSeconds(10));
} }
@Deprecated
@Test
void testCustomizeJettyIdleTimeoutDeprecated() {
bind("server.jetty.thread-idle-timeout", "10s");
assertThat(this.properties.getJetty().getThreads().getIdleTimeout()).hasSeconds(10);
}
@Test @Test
void testCustomizeJettyMaxQueueCapacity() { void testCustomizeJettyMaxQueueCapacity() {
bind("server.jetty.threads.max-queue-capacity", "5150"); bind("server.jetty.threads.max-queue-capacity", "5150");
assertThat(this.properties.getJetty().getThreads().getMaxQueueCapacity()).isEqualTo(5150); assertThat(this.properties.getJetty().getThreads().getMaxQueueCapacity()).isEqualTo(5150);
} }
@Deprecated
@Test
void testCustomizeJettyMaxQueueCapacityDeprecated() {
bind("server.jetty.max-queue-capacity", "5150");
assertThat(this.properties.getJetty().getThreads().getMaxQueueCapacity()).isEqualTo(5150);
}
@Test @Test
void testCustomizeUndertowServerOption() { void testCustomizeUndertowServerOption() {
bind("server.undertow.options.server.ALWAYS_SET_KEEP_ALIVE", "true"); bind("server.undertow.options.server.ALWAYS_SET_KEEP_ALIVE", "true");
@ -335,26 +278,12 @@ class ServerPropertiesTests {
assertThat(this.properties.getUndertow().getThreads().getIo()).isEqualTo(4); assertThat(this.properties.getUndertow().getThreads().getIo()).isEqualTo(4);
} }
@Deprecated
@Test
void testCustomizeUndertowIoThreadsDeprecated() {
bind("server.undertow.ioThreads", "4");
assertThat(this.properties.getUndertow().getThreads().getIo()).isEqualTo(4);
}
@Test @Test
void testCustomizeUndertowWorkerThreads() { void testCustomizeUndertowWorkerThreads() {
bind("server.undertow.threads.worker", "10"); bind("server.undertow.threads.worker", "10");
assertThat(this.properties.getUndertow().getThreads().getWorker()).isEqualTo(10); assertThat(this.properties.getUndertow().getThreads().getWorker()).isEqualTo(10);
} }
@Deprecated
@Test
void testCustomizeUndertowWorkerThreadsDeprecated() {
bind("server.undertow.workerThreads", "10");
assertThat(this.properties.getUndertow().getThreads().getWorker()).isEqualTo(10);
}
@Test @Test
void testCustomizeJettyAccessLog() { void testCustomizeJettyAccessLog() {
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -164,7 +164,7 @@ class JettyWebServerFactoryCustomizerTests {
@Test @Test
void threadPoolMaxThreadsCanBeCustomized() { void threadPoolMaxThreadsCanBeCustomized() {
bind("server.jetty.max-threads=100"); bind("server.jetty.threads.max=100");
JettyWebServer server = customizeAndGetServer(); JettyWebServer server = customizeAndGetServer();
QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool(); QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
assertThat(threadPool.getMaxThreads()).isEqualTo(100); assertThat(threadPool.getMaxThreads()).isEqualTo(100);
@ -172,7 +172,7 @@ class JettyWebServerFactoryCustomizerTests {
@Test @Test
void threadPoolMinThreadsCanBeCustomized() { void threadPoolMinThreadsCanBeCustomized() {
bind("server.jetty.min-threads=100"); bind("server.jetty.threads.min=100");
JettyWebServer server = customizeAndGetServer(); JettyWebServer server = customizeAndGetServer();
QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool(); QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
assertThat(threadPool.getMinThreads()).isEqualTo(100); assertThat(threadPool.getMinThreads()).isEqualTo(100);
@ -198,8 +198,8 @@ class JettyWebServerFactoryCustomizerTests {
@Test @Test
void threadPoolWithMaxQueueCapacityEqualToZeroCustomizesThreadPool() { void threadPoolWithMaxQueueCapacityEqualToZeroCustomizesThreadPool() {
bind("server.jetty.threads.max-queue-capacity=0", "server.jetty.min-threads=100", bind("server.jetty.threads.max-queue-capacity=0", "server.jetty.threads.min=100",
"server.jetty.max-threads=100", "server.jetty.threads.idle-timeout=6s"); "server.jetty.threads.max=100", "server.jetty.threads.idle-timeout=6s");
JettyWebServer server = customizeAndGetServer(); JettyWebServer server = customizeAndGetServer();
QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool(); QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
assertThat(threadPool.getMinThreads()).isEqualTo(100); assertThat(threadPool.getMinThreads()).isEqualTo(100);
@ -220,8 +220,8 @@ class JettyWebServerFactoryCustomizerTests {
@Test @Test
void threadPoolWithMaxQueueCapacityPositiveCustomizesThreadPool() { void threadPoolWithMaxQueueCapacityPositiveCustomizesThreadPool() {
bind("server.jetty.threads.max-queue-capacity=1234", "server.jetty.min-threads=10", bind("server.jetty.threads.max-queue-capacity=1234", "server.jetty.threads.min=10",
"server.jetty.max-threads=150", "server.jetty.threads.idle-timeout=3s"); "server.jetty.threads.max=150", "server.jetty.threads.idle-timeout=3s");
JettyWebServer server = customizeAndGetServer(); JettyWebServer server = customizeAndGetServer();
QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool(); QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
assertThat(threadPool.getMinThreads()).isEqualTo(10); assertThat(threadPool.getMinThreads()).isEqualTo(10);

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -186,26 +186,6 @@ class TomcatWebServerFactoryCustomizerTests {
assertThat(remoteIpValve.getInternalProxies()).isEqualTo("192.168.0.1"); assertThat(remoteIpValve.getInternalProxies()).isEqualTo("192.168.0.1");
} }
@Test
@Deprecated
void customRemoteIpValveWithDeprecatedProperties() {
bind("server.tomcat.remote-ip-header=x-my-remote-ip-header",
"server.tomcat.protocol-header=x-my-protocol-header", "server.tomcat.internal-proxies=192.168.0.1",
"server.tomcat.host-header=x-my-forward-host", "server.tomcat.port-header=x-my-forward-port",
"server.tomcat.protocol-header-https-value=On");
TomcatServletWebServerFactory factory = customizeAndGetFactory();
assertThat(factory.getEngineValves()).hasSize(1);
Valve valve = factory.getEngineValves().iterator().next();
assertThat(valve).isInstanceOf(RemoteIpValve.class);
RemoteIpValve remoteIpValve = (RemoteIpValve) valve;
assertThat(remoteIpValve.getProtocolHeader()).isEqualTo("x-my-protocol-header");
assertThat(remoteIpValve.getProtocolHeaderHttpsValue()).isEqualTo("On");
assertThat(remoteIpValve.getRemoteIpHeader()).isEqualTo("x-my-remote-ip-header");
assertThat(remoteIpValve.getHostHeader()).isEqualTo("x-my-forward-host");
assertThat(remoteIpValve.getPortHeader()).isEqualTo("x-my-forward-port");
assertThat(remoteIpValve.getInternalProxies()).isEqualTo("192.168.0.1");
}
@Test @Test
void customStaticResourceAllowCaching() { void customStaticResourceAllowCaching() {
bind("server.tomcat.resource.allow-caching=false"); bind("server.tomcat.resource.allow-caching=false");

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -212,15 +212,6 @@ class WebFluxAutoConfigurationTests {
}); });
} }
@Test
void customDateFormatWithDeprecatedProperty() {
this.contextRunner.withPropertyValues("spring.webflux.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 @Test
void customDateFormat() { void customDateFormat() {
this.contextRunner.withPropertyValues("spring.webflux.format.date:dd*MM*yyyy").run((context) -> { this.contextRunner.withPropertyValues("spring.webflux.format.date:dd*MM*yyyy").run((context) -> {

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -36,6 +36,7 @@ import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplic
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
import org.springframework.boot.test.system.CapturedOutput; import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension; import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.reactive.error.DefaultErrorAttributes; import org.springframework.boot.web.reactive.error.DefaultErrorAttributes;
import org.springframework.boot.web.reactive.error.ErrorAttributes; import org.springframework.boot.web.reactive.error.ErrorAttributes;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -337,7 +338,7 @@ class DefaultErrorWebExceptionHandlerIntegrationTests {
} }
@Test @Test
void defaultErrorAttributesSubclassUsingDeprecatedApiAndDelegation() { void defaultErrorAttributesSubclassUsingDelegation() {
this.contextRunner.withUserConfiguration(CustomErrorAttributesWithDelegation.class).run((context) -> { this.contextRunner.withUserConfiguration(CustomErrorAttributesWithDelegation.class).run((context) -> {
WebTestClient client = getWebClient(context); WebTestClient client = getWebClient(context);
client.get().uri("/badRequest").exchange().expectStatus().isBadRequest().expectBody().jsonPath("status") client.get().uri("/badRequest").exchange().expectStatus().isBadRequest().expectBody().jsonPath("status")
@ -347,7 +348,7 @@ class DefaultErrorWebExceptionHandlerIntegrationTests {
} }
@Test @Test
void defaultErrorAttributesSubclassUsingDeprecatedApiWithoutDelegation() { void defaultErrorAttributesSubclassWithoutDelegation() {
this.contextRunner.withUserConfiguration(CustomErrorAttributesWithoutDelegation.class).run((context) -> { this.contextRunner.withUserConfiguration(CustomErrorAttributesWithoutDelegation.class).run((context) -> {
WebTestClient client = getWebClient(context); WebTestClient client = getWebClient(context);
client.get().uri("/badRequest").exchange().expectStatus().isBadRequest().expectBody().jsonPath("status") client.get().uri("/badRequest").exchange().expectStatus().isBadRequest().expectBody().jsonPath("status")
@ -425,9 +426,8 @@ class DefaultErrorWebExceptionHandlerIntegrationTests {
ErrorAttributes errorAttributes() { ErrorAttributes errorAttributes() {
return new DefaultErrorAttributes() { return new DefaultErrorAttributes() {
@Override @Override
@SuppressWarnings("deprecation") public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
public Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) { Map<String, Object> errorAttributes = super.getErrorAttributes(request, options);
Map<String, Object> errorAttributes = super.getErrorAttributes(request, includeStackTrace);
errorAttributes.put("error", "custom error"); errorAttributes.put("error", "custom error");
errorAttributes.put("newAttribute", "value"); errorAttributes.put("newAttribute", "value");
errorAttributes.remove("path"); errorAttributes.remove("path");
@ -446,8 +446,7 @@ class DefaultErrorWebExceptionHandlerIntegrationTests {
ErrorAttributes errorAttributes() { ErrorAttributes errorAttributes() {
return new DefaultErrorAttributes() { return new DefaultErrorAttributes() {
@Override @Override
@SuppressWarnings("deprecation") public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
public Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
Map<String, Object> errorAttributes = new HashMap<>(); Map<String, Object> errorAttributes = new HashMap<>();
errorAttributes.put("status", 400); errorAttributes.put("status", 400);
errorAttributes.put("error", "custom error"); errorAttributes.put("error", "custom error");

@ -128,13 +128,6 @@ bom {
] ]
} }
} }
library("Bitronix", "2.1.4") {
group("org.codehaus.btm") {
modules = [
"btm"
]
}
}
library("Build Helper Maven Plugin", "3.2.0") { library("Build Helper Maven Plugin", "3.2.0") {
group("org.codehaus.mojo") { group("org.codehaus.mojo") {
plugins = [ plugins = [
@ -1421,7 +1414,6 @@ bom {
"spring-boot-starter-jooq", "spring-boot-starter-jooq",
"spring-boot-starter-json", "spring-boot-starter-json",
"spring-boot-starter-jta-atomikos", "spring-boot-starter-jta-atomikos",
"spring-boot-starter-jta-bitronix",
"spring-boot-starter-log4j2", "spring-boot-starter-log4j2",
"spring-boot-starter-logging", "spring-boot-starter-logging",
"spring-boot-starter-mail", "spring-boot-starter-mail",

@ -6472,7 +6472,6 @@ When a `jndi-name` is set, it takes precedence over all other Session-related se
[[boot-features-jta]] [[boot-features-jta]]
== Distributed Transactions with JTA == Distributed Transactions with JTA
Spring Boot supports distributed JTA transactions across multiple XA resources by using an https://www.atomikos.com/[Atomikos] embedded transaction manager. Spring Boot supports distributed JTA transactions across multiple XA resources by using an https://www.atomikos.com/[Atomikos] embedded transaction manager.
Deprecated support for using a https://github.com/bitronix/btm[Bitronix] embedded transaction manager is also provided but it will be removed in a future release.
JTA transactions are also supported when deploying to a suitable Java EE Application Server. JTA transactions are also supported when deploying to a suitable Java EE Application Server.
When a JTA environment is detected, Spring's `JtaTransactionManager` is used to manage transactions. When a JTA environment is detected, Spring's `JtaTransactionManager` is used to manage transactions.
@ -6499,24 +6498,6 @@ To ensure uniqueness in production, you should configure the configprop:spring.j
[[boot-features-jta-bitronix]]
=== Using a Bitronix Transaction Manager
NOTE: As of Spring Boot 2.3, support for Bitronix has been deprecated and will be removed in a future release.
You can use the `spring-boot-starter-jta-bitronix` starter to add the appropriate Bitronix dependencies to your project.
As with Atomikos, Spring Boot automatically configures Bitronix and post-processes your beans to ensure that startup and shutdown ordering is correct.
By default, Bitronix transaction log files (`part1.btm` and `part2.btm`) are written to a `transaction-logs` directory in your application home directory.
You can customize the location of this directory by setting the configprop:spring.jta.log-dir[] property.
Properties starting with `spring.jta.bitronix.properties` are also bound to the `bitronix.tm.Configuration` bean, allowing for complete customization.
See the https://github.com/bitronix/btm/wiki/Transaction-manager-configuration[Bitronix documentation] for details.
NOTE: To ensure that multiple transaction managers can safely coordinate the same resource managers, each Bitronix instance must be configured with a unique ID.
By default, this ID is the IP address of the machine on which Bitronix is running.
To ensure uniqueness in production, you should configure the configprop:spring.jta.transaction-manager-id[] property with a different value for each instance of your application.
[[boot-features-jta-javaee]] [[boot-features-jta-javaee]]
=== Using a Java EE Managed Transaction Manager === Using a Java EE Managed Transaction Manager
If you package your Spring Boot application as a `war` or `ear` file and deploy it to a Java EE application server, you can use your application server's built-in transaction manager. If you package your Spring Boot application as a `war` or `ear` file and deploy it to a Java EE application server, you can use your application server's built-in transaction manager.

@ -1,14 +0,0 @@
plugins {
id "org.springframework.boot.starter"
}
description = "Starter for JTA transactions using Bitronix. Deprecated since 2.3.0"
dependencies {
api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter"))
api("jakarta.jms:jakarta.jms-api")
api("jakarta.transaction:jakarta.transaction-api")
api("org.codehaus.btm:btm") {
exclude group: "javax.transaction", module: "jta"
}
}

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -128,26 +128,4 @@ public interface BootArchive extends Task {
*/ */
void setClasspath(FileCollection classpath); void setClasspath(FileCollection classpath);
/**
* Returns {@code true} if the Devtools jar should be excluded, otherwise
* {@code false}.
* @return {@code true} if the Devtools jar should be excluded, or {@code false} if
* not
* @deprecated since 2.3.0 in favour of configuring a classpath that does not include
* development-only dependencies
*/
@Input
@Deprecated
boolean isExcludeDevtools();
/**
* Sets whether or not the Devtools jar should be excluded.
* @param excludeDevtools {@code true} if the Devtools jar should be excluded, or
* {@code false} if not
* @deprecated since 2.3.0 in favour of configuring a classpath that does not include
* development-only dependencies
*/
@Deprecated
void setExcludeDevtools(boolean excludeDevtools);
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -76,15 +76,12 @@ class BootArchiveSupport {
private LaunchScriptConfiguration launchScript; private LaunchScriptConfiguration launchScript;
private boolean excludeDevtools = false;
BootArchiveSupport(String loaderMainClass, Spec<FileCopyDetails> librarySpec, BootArchiveSupport(String loaderMainClass, Spec<FileCopyDetails> librarySpec,
Function<FileCopyDetails, ZipCompression> compressionResolver) { Function<FileCopyDetails, ZipCompression> compressionResolver) {
this.loaderMainClass = loaderMainClass; this.loaderMainClass = loaderMainClass;
this.librarySpec = librarySpec; this.librarySpec = librarySpec;
this.compressionResolver = compressionResolver; this.compressionResolver = compressionResolver;
this.requiresUnpack.include(Specs.satisfyNone()); this.requiresUnpack.include(Specs.satisfyNone());
configureExclusions();
} }
void configureManifest(Manifest manifest, String mainClass, String classes, String lib, String classPathIndex, void configureManifest(Manifest manifest, String mainClass, String classes, String lib, String classPathIndex,
@ -149,15 +146,6 @@ class BootArchiveSupport {
this.requiresUnpack.include(spec); this.requiresUnpack.include(spec);
} }
boolean isExcludeDevtools() {
return this.excludeDevtools;
}
void setExcludeDevtools(boolean excludeDevtools) {
this.excludeDevtools = excludeDevtools;
configureExclusions();
}
void excludeNonZipLibraryFiles(FileCopyDetails details) { void excludeNonZipLibraryFiles(FileCopyDetails details) {
if (this.librarySpec.isSatisfiedBy(details)) { if (this.librarySpec.isSatisfiedBy(details)) {
excludeNonZipFiles(details); excludeNonZipFiles(details);
@ -190,14 +178,6 @@ class BootArchiveSupport {
return true; return true;
} }
private void configureExclusions() {
Set<String> excludes = new HashSet<>();
if (this.excludeDevtools) {
excludes.add("**/spring-boot-devtools-*.jar");
}
this.exclusions.setExcludes(excludes);
}
void moveModuleInfoToRoot(CopySpec spec) { void moveModuleInfoToRoot(CopySpec spec) {
spec.filesMatching("module-info.class", BootArchiveSupport::moveToRoot); spec.filesMatching("module-info.class", BootArchiveSupport::moveToRoot);
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -22,8 +22,6 @@ import java.util.concurrent.Callable;
import java.util.function.Function; import java.util.function.Function;
import org.gradle.api.Action; import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ResolvableDependencies; import org.gradle.api.artifacts.ResolvableDependencies;
import org.gradle.api.file.CopySpec; import org.gradle.api.file.CopySpec;
import org.gradle.api.file.FileCollection; import org.gradle.api.file.FileCollection;
@ -128,18 +126,6 @@ public class BootJar extends Jar implements BootArchive {
return this.support.createCopyAction(this); return this.support.createCopyAction(this);
} }
/**
* Returns the {@link Configuration Configurations} of the project associated with
* this task.
* @return the configurations
* @deprecated since 2.3.5 in favor of {@link Project#getConfigurations}
*/
@Internal
@Deprecated
protected Iterable<Configuration> getConfigurations() {
return getProject().getConfigurations();
}
@Override @Override
public Property<String> getMainClass() { public Property<String> getMainClass() {
return this.mainClass; return this.mainClass;
@ -232,18 +218,6 @@ public class BootJar extends Jar implements BootArchive {
this.classpath = getProject().files(classpath); this.classpath = getProject().files(classpath);
} }
@Override
@Deprecated
public boolean isExcludeDevtools() {
return this.support.isExcludeDevtools();
}
@Override
@Deprecated
public void setExcludeDevtools(boolean excludeDevtools) {
this.support.setExcludeDevtools(excludeDevtools);
}
/** /**
* Returns a {@code CopySpec} that can be used to add content to the {@code BOOT-INF} * Returns a {@code CopySpec} that can be used to add content to the {@code BOOT-INF}
* directory of the jar. * directory of the jar.

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -169,18 +169,6 @@ public class BootWar extends War implements BootArchive {
this.providedClasspath = getProject().files(classpath); this.providedClasspath = getProject().files(classpath);
} }
@Override
@Deprecated
public boolean isExcludeDevtools() {
return this.support.isExcludeDevtools();
}
@Override
@Deprecated
public void setExcludeDevtools(boolean excludeDevtools) {
this.support.setExcludeDevtools(excludeDevtools);
}
/** /**
* Return the {@link ZipCompression} that should be used when adding the file * Return the {@link ZipCompression} that should be used when adding the file
* represented by the given {@code details} to the jar. By default, any * represented by the given {@code details} to the jar. By default, any

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -369,19 +369,6 @@ abstract class AbstractBootArchiveTests<T extends Jar & BootArchive> {
} }
} }
@Test
@Deprecated
void devtoolsJarCanBeIncluded() throws IOException {
this.task.getMainClass().set("com.example.Main");
this.task.classpath(jarFile("spring-boot-devtools-0.1.2.jar"));
this.task.setExcludeDevtools(false);
executeTask();
assertThat(this.task.getArchiveFile().get().getAsFile()).exists();
try (JarFile jarFile = new JarFile(this.task.getArchiveFile().get().getAsFile())) {
assertThat(jarFile.getEntry(this.libPath + "spring-boot-devtools-0.1.2.jar")).isNotNull();
}
}
@Test @Test
void allEntriesUseUnixPlatformAndUtf8NameEncoding() throws IOException { void allEntriesUseUnixPlatformAndUtf8NameEncoding() throws IOException {
this.task.getMainClass().set("com.example.Main"); this.task.getMainClass().set("com.example.Main");

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -80,18 +80,6 @@ class BootWarTests extends AbstractBootArchiveTests<BootWar> {
} }
} }
@Test
@Deprecated
void devtoolsJarCanBeIncludedWhenItsOnTheProvidedClasspath() throws IOException {
getTask().getMainClass().set("com.example.Main");
getTask().providedClasspath(jarFile("spring-boot-devtools-0.1.2.jar"));
getTask().setExcludeDevtools(false);
executeTask();
try (JarFile jarFile = new JarFile(getTask().getArchiveFile().get().getAsFile())) {
assertThat(jarFile.getEntry("WEB-INF/lib-provided/spring-boot-devtools-0.1.2.jar")).isNotNull();
}
}
@Test @Test
void webappResourcesInDirectoriesThatOverlapWithLoaderCanBePackaged() throws IOException { void webappResourcesInDirectoriesThatOverlapWithLoaderCanBePackaged() throws IOException {
File webappDirectory = new File(this.temp, "src/main/webapp"); File webappDirectory = new File(this.temp, "src/main/webapp");

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -42,20 +42,7 @@ public interface Layout {
* @return the location of the library relative to the root of the archive (should end * @return the location of the library relative to the root of the archive (should end
* with '/') or {@code null} if the library should not be included. * with '/') or {@code null} if the library should not be included.
*/ */
default String getLibraryLocation(String libraryName, LibraryScope scope) { String getLibraryLocation(String libraryName, LibraryScope scope);
return getLibraryDestination(libraryName, scope);
}
/**
* Returns the destination path for a given library.
* @param libraryName the name of the library (excluding any path)
* @param scope the scope of the library
* @return the destination relative to the root of the archive (should end with '/')
* or {@code null} if the library should not be included.
* @deprecated since 2.3.0 in favor of {@link #getLibraryLocation}
*/
@Deprecated
String getLibraryDestination(String libraryName, LibraryScope scope);
/** /**
* Returns the location of classes within the archive. * Returns the location of classes within the archive.

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -73,12 +73,6 @@ public final class Layouts {
return "BOOT-INF/lib/"; return "BOOT-INF/lib/";
} }
@Deprecated
@Override
public String getLibraryDestination(String libraryName, LibraryScope scope) {
return "BOOT-INF/lib/";
}
@Override @Override
public String getClassesLocation() { public String getClassesLocation() {
return ""; return "";
@ -161,12 +155,6 @@ public final class Layouts {
return SCOPE_LOCATION.get(scope); return SCOPE_LOCATION.get(scope);
} }
@Deprecated
@Override
public String getLibraryDestination(String libraryName, LibraryScope scope) {
return SCOPE_LOCATION.get(scope);
}
@Override @Override
public String getClassesLocation() { public String getClassesLocation() {
return "WEB-INF/classes/"; return "WEB-INF/classes/";

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -175,16 +175,6 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
@Parameter(property = "spring-boot.run.main-class") @Parameter(property = "spring-boot.run.main-class")
private String mainClass; private String mainClass;
/**
* Additional directories besides the classes directory that should be added to the
* classpath.
* @since 1.0.0
* @deprecated since 2.3.0 in favor of {@code directories}
*/
@Deprecated
@Parameter(property = "spring-boot.run.folders")
private String[] folders;
/** /**
* Additional directories besides the classes directory that should be added to the * Additional directories besides the classes directory that should be added to the
* classpath. * classpath.
@ -462,11 +452,6 @@ public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo {
} }
private void addUserDefinedDirectories(List<URL> urls) throws MalformedURLException { private void addUserDefinedDirectories(List<URL> urls) throws MalformedURLException {
if (this.folders != null) {
for (String folder : this.folders) {
urls.add(new File(folder).toURI().toURL());
}
}
if (this.directories != null) { if (this.directories != null) {
for (String directory : this.directories) { for (String directory : this.directories) {
urls.add(new File(directory).toURI().toURL()); urls.add(new File(directory).toURI().toURL());

@ -44,7 +44,6 @@ dependencies {
optional("org.apache.tomcat.embed:tomcat-embed-jasper") optional("org.apache.tomcat.embed:tomcat-embed-jasper")
optional("org.apache.tomcat:tomcat-jdbc") optional("org.apache.tomcat:tomcat-jdbc")
optional("org.assertj:assertj-core") optional("org.assertj:assertj-core")
optional("org.codehaus.btm:btm")
optional("org.codehaus.groovy:groovy") optional("org.codehaus.groovy:groovy")
optional("org.codehaus.groovy:groovy-xml") optional("org.codehaus.groovy:groovy-xml")
optional("org.eclipse.jetty:jetty-servlets") optional("org.eclipse.jetty:jetty-servlets")

@ -423,7 +423,7 @@ public class SpringApplication {
// Not allowed in some environments. // Not allowed in some environments.
} }
} }
refresh((ApplicationContext) context); refresh(context);
} }
private void configureHeadlessProperty() { private void configureHeadlessProperty() {
@ -747,18 +747,6 @@ public class SpringApplication {
return new BeanDefinitionLoader(registry, sources); return new BeanDefinitionLoader(registry, sources);
} }
/**
* Refresh the underlying {@link ApplicationContext}.
* @param applicationContext the application context to refresh
* @deprecated since 2.3.0 in favor of
* {@link #refresh(ConfigurableApplicationContext)}
*/
@Deprecated
protected void refresh(ApplicationContext applicationContext) {
Assert.isInstanceOf(ConfigurableApplicationContext.class, applicationContext);
refresh((ConfigurableApplicationContext) applicationContext);
}
/** /**
* Refresh the underlying {@link ApplicationContext}. * Refresh the underlying {@link ApplicationContext}.
* @param applicationContext the application context to refresh * @param applicationContext the application context to refresh

@ -1,81 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import javax.transaction.TransactionManager;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.core.Ordered;
/**
* {@link BeanFactoryPostProcessor} to automatically register the recommended
* {@link ConfigurableListableBeanFactory#registerDependentBean(String, String)
* dependencies} for correct Bitronix shutdown ordering. With Bitronix it appears that
* ConnectionFactory and DataSource beans must be shutdown before the
* {@link TransactionManager}.
*
* @author Phillip Webb
* @since 1.2.0
* @deprecated since 2.3.0 as the Bitronix project is no longer being maintained
*/
@Deprecated
public class BitronixDependentBeanFactoryPostProcessor implements BeanFactoryPostProcessor, Ordered {
private static final String[] NO_BEANS = {};
private int order = Ordered.LOWEST_PRECEDENCE;
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
String[] transactionManagers = beanFactory.getBeanNamesForType(TransactionManager.class, true, false);
for (String transactionManager : transactionManagers) {
addTransactionManagerDependencies(beanFactory, transactionManager);
}
}
private void addTransactionManagerDependencies(ConfigurableListableBeanFactory beanFactory,
String transactionManager) {
for (String dependentBeanName : getBeanNamesForType(beanFactory, "javax.jms.ConnectionFactory")) {
beanFactory.registerDependentBean(transactionManager, dependentBeanName);
}
for (String dependentBeanName : getBeanNamesForType(beanFactory, "javax.sql.DataSource")) {
beanFactory.registerDependentBean(transactionManager, dependentBeanName);
}
}
private String[] getBeanNamesForType(ConfigurableListableBeanFactory beanFactory, String type) {
try {
return beanFactory.getBeanNamesForType(Class.forName(type), true, false);
}
catch (ClassNotFoundException | NoClassDefFoundError ex) {
// Ignore
}
return NO_BEANS;
}
@Override
public int getOrder() {
return this.order;
}
public void setOrder(int order) {
this.order = order;
}
}

@ -1,42 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import javax.jms.ConnectionFactory;
import javax.jms.XAConnectionFactory;
import org.springframework.boot.jms.XAConnectionFactoryWrapper;
/**
* {@link XAConnectionFactoryWrapper} that uses a Bitronix
* {@link PoolingConnectionFactoryBean} to wrap a {@link XAConnectionFactory}.
*
* @author Phillip Webb
* @since 1.2.0
* @deprecated since 2.3.0 as the Bitronix project is no longer being maintained
*/
@Deprecated
public class BitronixXAConnectionFactoryWrapper implements XAConnectionFactoryWrapper {
@Override
public ConnectionFactory wrapConnectionFactory(XAConnectionFactory connectionFactory) {
PoolingConnectionFactoryBean pool = new PoolingConnectionFactoryBean();
pool.setConnectionFactory(connectionFactory);
return pool;
}
}

@ -1,41 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import javax.sql.XADataSource;
import org.springframework.boot.jdbc.XADataSourceWrapper;
/**
* {@link XADataSourceWrapper} that uses a Bitronix {@link PoolingDataSourceBean} to wrap
* a {@link XADataSource}.
*
* @author Phillip Webb
* @since 1.2.0
* @deprecated since 2.3.0 as the Bitronix project is no longer being maintained
*/
@Deprecated
public class BitronixXADataSourceWrapper implements XADataSourceWrapper {
@Override
public PoolingDataSourceBean wrapDataSource(XADataSource dataSource) throws Exception {
PoolingDataSourceBean pool = new PoolingDataSourceBean();
pool.setDataSource(dataSource);
return pool;
}
}

@ -1,157 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.XAConnection;
import javax.jms.XAConnectionFactory;
import javax.jms.XAJMSContext;
import bitronix.tm.resource.common.ResourceBean;
import bitronix.tm.resource.common.XAStatefulHolder;
import bitronix.tm.resource.jms.PoolingConnectionFactory;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.StringUtils;
/**
* Spring friendly version of {@link PoolingConnectionFactory}. Provides sensible defaults
* and also supports direct wrapping of a {@link XAConnectionFactory} instance.
*
* @author Phillip Webb
* @author Josh Long
* @author Andy Wilkinson
* @since 1.2.0
* @deprecated since 2.3.0 as the Bitronix project is no longer being maintained
*/
@Deprecated
@SuppressWarnings("serial")
@ConfigurationProperties(prefix = "spring.jta.bitronix.connectionfactory")
public class PoolingConnectionFactoryBean extends PoolingConnectionFactory
implements BeanNameAware, InitializingBean, DisposableBean {
private static final ThreadLocal<PoolingConnectionFactoryBean> source = new ThreadLocal<>();
private String beanName;
private XAConnectionFactory connectionFactory;
public PoolingConnectionFactoryBean() {
setMaxPoolSize(10);
setTestConnections(true);
setAutomaticEnlistingEnabled(true);
setAllowLocalTransactions(true);
}
@Override
public synchronized void init() {
source.set(this);
try {
super.init();
}
finally {
source.remove();
}
}
@Override
public void setBeanName(String name) {
this.beanName = name;
}
@Override
public void afterPropertiesSet() throws Exception {
if (!StringUtils.hasLength(getUniqueName())) {
setUniqueName(this.beanName);
}
init();
}
@Override
public void destroy() throws Exception {
close();
}
/**
* Set the {@link XAConnectionFactory} directly, instead of calling
* {@link #setClassName(String)}.
* @param connectionFactory the connection factory to use
*/
public void setConnectionFactory(XAConnectionFactory connectionFactory) {
this.connectionFactory = connectionFactory;
setClassName(DirectXAConnectionFactory.class.getName());
setDriverProperties(new Properties());
}
protected final XAConnectionFactory getConnectionFactory() {
return this.connectionFactory;
}
@Override
public XAStatefulHolder createPooledConnection(Object xaFactory, ResourceBean bean) throws Exception {
if (xaFactory instanceof DirectXAConnectionFactory) {
xaFactory = ((DirectXAConnectionFactory) xaFactory).getConnectionFactory();
}
return super.createPooledConnection(xaFactory, bean);
}
/**
* A {@link XAConnectionFactory} implementation that delegates to the
* {@link ThreadLocal} {@link PoolingConnectionFactoryBean}.
*
* @see PoolingConnectionFactoryBean#setConnectionFactory(XAConnectionFactory)
*/
public static class DirectXAConnectionFactory implements XAConnectionFactory {
private final XAConnectionFactory connectionFactory;
public DirectXAConnectionFactory() {
this.connectionFactory = source.get().connectionFactory;
}
@Override
public XAConnection createXAConnection() throws JMSException {
return this.connectionFactory.createXAConnection();
}
@Override
public XAConnection createXAConnection(String userName, String password) throws JMSException {
return this.connectionFactory.createXAConnection(userName, password);
}
public XAConnectionFactory getConnectionFactory() {
return this.connectionFactory;
}
@Override
public XAJMSContext createXAContext() {
return this.connectionFactory.createXAContext();
}
@Override
public XAJMSContext createXAContext(String username, String password) {
return this.connectionFactory.createXAContext(username, password);
}
}
}

@ -1,179 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Properties;
import java.util.logging.Logger;
import javax.sql.XAConnection;
import javax.sql.XADataSource;
import bitronix.tm.resource.common.ResourceBean;
import bitronix.tm.resource.common.XAStatefulHolder;
import bitronix.tm.resource.jdbc.PoolingDataSource;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.StringUtils;
/**
* Spring friendly version of {@link PoolingDataSource}. Provides sensible defaults and
* also supports direct wrapping of a {@link XADataSource} instance.
*
* @author Phillip Webb
* @author Josh Long
* @author Andy Wilkinson
* @since 1.2.0
* @deprecated since 2.3.0 as the Bitronix project is no longer being maintained
*/
@Deprecated
@SuppressWarnings("serial")
@ConfigurationProperties(prefix = "spring.jta.bitronix.datasource")
public class PoolingDataSourceBean extends PoolingDataSource implements BeanNameAware, InitializingBean {
private static final ThreadLocal<PoolingDataSourceBean> source = new ThreadLocal<>();
private XADataSource dataSource;
private String beanName;
public PoolingDataSourceBean() {
setMaxPoolSize(10);
setAllowLocalTransactions(true);
setEnableJdbc4ConnectionTest(true);
}
@Override
public synchronized void init() {
source.set(this);
try {
super.init();
}
finally {
source.remove();
}
}
@Override
public void setBeanName(String name) {
this.beanName = name;
}
@Override
public void afterPropertiesSet() throws Exception {
if (!StringUtils.hasLength(getUniqueName())) {
setUniqueName(this.beanName);
}
}
/**
* Set the {@link XADataSource} directly, instead of calling
* {@link #setClassName(String)}.
* @param dataSource the data source to use
*/
public void setDataSource(XADataSource dataSource) {
this.dataSource = dataSource;
setClassName(DirectXADataSource.class.getName());
setDriverProperties(new Properties());
}
protected final XADataSource getDataSource() {
return this.dataSource;
}
@Override
public XAStatefulHolder createPooledConnection(Object xaFactory, ResourceBean bean) throws Exception {
if (xaFactory instanceof DirectXADataSource) {
xaFactory = ((DirectXADataSource) xaFactory).getDataSource();
}
return super.createPooledConnection(xaFactory, bean);
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
XADataSource dataSource = this.dataSource;
if (dataSource != null) {
try {
return dataSource.getParentLogger();
}
catch (Exception ex) {
// Swallow and continue
}
}
return Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
}
/**
* A {@link XADataSource} implementation that delegates to the {@link ThreadLocal}
* {@link PoolingDataSourceBean}.
*
* @see PoolingDataSourceBean#setDataSource(XADataSource)
*/
public static class DirectXADataSource implements XADataSource {
private final XADataSource dataSource;
public DirectXADataSource() {
this.dataSource = source.get().dataSource;
}
@Override
public PrintWriter getLogWriter() throws SQLException {
return this.dataSource.getLogWriter();
}
@Override
public XAConnection getXAConnection() throws SQLException {
return this.dataSource.getXAConnection();
}
@Override
public XAConnection getXAConnection(String user, String password) throws SQLException {
return this.dataSource.getXAConnection(user, password);
}
@Override
public void setLogWriter(PrintWriter out) throws SQLException {
this.dataSource.setLogWriter(out);
}
@Override
public void setLoginTimeout(int seconds) throws SQLException {
this.dataSource.setLoginTimeout(seconds);
}
@Override
public int getLoginTimeout() throws SQLException {
return this.dataSource.getLoginTimeout();
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
return this.dataSource.getParentLogger();
}
public XADataSource getDataSource() {
return this.dataSource;
}
}
}

@ -1,21 +0,0 @@
/*
* 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.
* 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.
*/
/**
* Support classes for Bitronix JTA.
* @deprecated since 2.3.0 as the Bitronix project is no longer being maintained
*/
package org.springframework.boot.jta.bitronix;

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,7 +21,6 @@ import io.undertow.Undertow.Builder;
import io.undertow.server.HttpHandler; import io.undertow.server.HttpHandler;
import io.undertow.servlet.api.DeploymentManager; import io.undertow.servlet.api.DeploymentManager;
import org.springframework.boot.web.server.Compression;
import org.springframework.boot.web.server.WebServer; import org.springframework.boot.web.server.WebServer;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -44,58 +43,6 @@ public class UndertowServletWebServer extends UndertowWebServer {
private final DeploymentManager manager; private final DeploymentManager manager;
/**
* Create a new {@link UndertowServletWebServer} instance.
* @param builder the builder
* @param manager the deployment manager
* @param contextPath the root context path
* @param autoStart if the server should be started
* @param compression compression configuration
* @deprecated since 2.3.0 in favor of
* {@link #UndertowServletWebServer(io.undertow.Undertow.Builder, Iterable, String, boolean)}
*/
@Deprecated
public UndertowServletWebServer(Builder builder, DeploymentManager manager, String contextPath, boolean autoStart,
Compression compression) {
this(builder, manager, contextPath, false, autoStart, compression);
}
/**
* Create a new {@link UndertowServletWebServer} instance.
* @param builder the builder
* @param manager the deployment manager
* @param contextPath the root context path
* @param useForwardHeaders if x-forward headers should be used
* @param autoStart if the server should be started
* @param compression compression configuration
* @deprecated since 2.3.0 in favor of
* {@link #UndertowServletWebServer(io.undertow.Undertow.Builder, Iterable, String, boolean)}
*/
@Deprecated
public UndertowServletWebServer(Builder builder, DeploymentManager manager, String contextPath,
boolean useForwardHeaders, boolean autoStart, Compression compression) {
this(builder, manager, contextPath, useForwardHeaders, autoStart, compression, null);
}
/**
* Create a new {@link UndertowServletWebServer} instance.
* @param builder the builder
* @param manager the deployment manager
* @param contextPath the root context path
* @param useForwardHeaders if x-forward headers should be used
* @param autoStart if the server should be started
* @param compression compression configuration
* @param serverHeader string to be used in HTTP header
* @deprecated since 2.3.0 in favor of
* {@link #UndertowServletWebServer(io.undertow.Undertow.Builder, Iterable, String, boolean)}
*/
@Deprecated
public UndertowServletWebServer(Builder builder, DeploymentManager manager, String contextPath,
boolean useForwardHeaders, boolean autoStart, Compression compression, String serverHeader) {
this(builder, UndertowWebServerFactoryDelegate.createHttpHandlerFactories(compression, useForwardHeaders,
serverHeader, null, new DeploymentManagerHttpHandlerFactory(manager)), contextPath, autoStart);
}
/** /**
* Create a new {@link UndertowServletWebServer} instance. * Create a new {@link UndertowServletWebServer} instance.
* @param builder the builder * @param builder the builder

@ -83,21 +83,7 @@ public class UndertowWebServer implements WebServer {
* @param autoStart if the server should be started * @param autoStart if the server should be started
*/ */
public UndertowWebServer(Undertow.Builder builder, boolean autoStart) { public UndertowWebServer(Undertow.Builder builder, boolean autoStart) {
this(builder, autoStart, null); this(builder, Collections.singleton(new CloseableHttpHandlerFactory(null)), autoStart);
}
/**
* Create a new {@link UndertowWebServer} instance.
* @param builder the builder
* @param autoStart if the server should be started
* @param closeable called when the server is stopped
* @since 2.0.4
* @deprecated since 2.3.0 in favor of
* {@link #UndertowWebServer(io.undertow.Undertow.Builder, Iterable, boolean)}
*/
@Deprecated
public UndertowWebServer(Undertow.Builder builder, boolean autoStart, Closeable closeable) {
this(builder, Collections.singleton(new CloseableHttpHandlerFactory(closeable)), autoStart);
} }
/** /**

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -63,32 +63,9 @@ public class DefaultErrorAttributes implements ErrorAttributes {
private static final String ERROR_ATTRIBUTE = DefaultErrorAttributes.class.getName() + ".ERROR"; private static final String ERROR_ATTRIBUTE = DefaultErrorAttributes.class.getName() + ".ERROR";
private final Boolean includeException;
/**
* Create a new {@link DefaultErrorAttributes} instance.
*/
public DefaultErrorAttributes() {
this.includeException = null;
}
/**
* Create a new {@link DefaultErrorAttributes} instance.
* @param includeException whether to include the "exception" attribute
* @deprecated since 2.3.0 in favor of
* {@link ErrorAttributeOptions#including(Include...)}
*/
@Deprecated
public DefaultErrorAttributes(boolean includeException) {
this.includeException = includeException;
}
@Override @Override
public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) { public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
Map<String, Object> errorAttributes = getErrorAttributes(request, options.isIncluded(Include.STACK_TRACE)); Map<String, Object> errorAttributes = getErrorAttributes(request, options.isIncluded(Include.STACK_TRACE));
if (Boolean.TRUE.equals(this.includeException)) {
options = options.including(Include.EXCEPTION);
}
if (!options.isIncluded(Include.EXCEPTION)) { if (!options.isIncluded(Include.EXCEPTION)) {
errorAttributes.remove("exception"); errorAttributes.remove("exception");
} }
@ -104,9 +81,7 @@ public class DefaultErrorAttributes implements ErrorAttributes {
return errorAttributes; return errorAttributes;
} }
@Override private Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
@Deprecated
public Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
Map<String, Object> errorAttributes = new LinkedHashMap<>(); Map<String, Object> errorAttributes = new LinkedHashMap<>();
errorAttributes.put("timestamp", new Date()); errorAttributes.put("timestamp", new Date());
errorAttributes.put("path", request.path()); errorAttributes.put("path", request.path());

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,7 +20,6 @@ import java.util.Collections;
import java.util.Map; import java.util.Map;
import org.springframework.boot.web.error.ErrorAttributeOptions; import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.error.ErrorAttributeOptions.Include;
import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
@ -35,20 +34,6 @@ import org.springframework.web.server.ServerWebExchange;
*/ */
public interface ErrorAttributes { public interface ErrorAttributes {
/**
* Return a {@link Map} of the error attributes. The map can be used as the model of
* an error page, or returned as a {@link ServerResponse} body.
* @param request the source request
* @param includeStackTrace if stack trace attribute should be included
* @return a map of error attributes
* @deprecated since 2.3.0 in favor of
* {@link #getErrorAttributes(ServerRequest, ErrorAttributeOptions)}
*/
@Deprecated
default Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
return Collections.emptyMap();
}
/** /**
* Return a {@link Map} of the error attributes. The map can be used as the model of * Return a {@link Map} of the error attributes. The map can be used as the model of
* an error page, or returned as a {@link ServerResponse} body. * an error page, or returned as a {@link ServerResponse} body.
@ -57,7 +42,7 @@ public interface ErrorAttributes {
* @return a map of error attributes * @return a map of error attributes
*/ */
default Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) { default Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
return getErrorAttributes(request, options.isIncluded(Include.STACK_TRACE)); return Collections.emptyMap();
} }
/** /**

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -70,26 +70,6 @@ public class DefaultErrorAttributes implements ErrorAttributes, HandlerException
private static final String ERROR_ATTRIBUTE = DefaultErrorAttributes.class.getName() + ".ERROR"; private static final String ERROR_ATTRIBUTE = DefaultErrorAttributes.class.getName() + ".ERROR";
private final Boolean includeException;
/**
* Create a new {@link DefaultErrorAttributes} instance.
*/
public DefaultErrorAttributes() {
this.includeException = null;
}
/**
* Create a new {@link DefaultErrorAttributes} instance.
* @param includeException whether to include the "exception" attribute
* @deprecated since 2.3.0 in favor of
* {@link ErrorAttributeOptions#including(Include...)}
*/
@Deprecated
public DefaultErrorAttributes(boolean includeException) {
this.includeException = includeException;
}
@Override @Override
public int getOrder() { public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE; return Ordered.HIGHEST_PRECEDENCE;
@ -109,9 +89,6 @@ public class DefaultErrorAttributes implements ErrorAttributes, HandlerException
@Override @Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) { public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
Map<String, Object> errorAttributes = getErrorAttributes(webRequest, options.isIncluded(Include.STACK_TRACE)); Map<String, Object> errorAttributes = getErrorAttributes(webRequest, options.isIncluded(Include.STACK_TRACE));
if (Boolean.TRUE.equals(this.includeException)) {
options = options.including(Include.EXCEPTION);
}
if (!options.isIncluded(Include.EXCEPTION)) { if (!options.isIncluded(Include.EXCEPTION)) {
errorAttributes.remove("exception"); errorAttributes.remove("exception");
} }
@ -127,9 +104,7 @@ public class DefaultErrorAttributes implements ErrorAttributes, HandlerException
return errorAttributes; return errorAttributes;
} }
@Override private Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
@Deprecated
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> errorAttributes = new LinkedHashMap<>(); Map<String, Object> errorAttributes = new LinkedHashMap<>();
errorAttributes.put("timestamp", new Date()); errorAttributes.put("timestamp", new Date());
addStatus(errorAttributes, webRequest); addStatus(errorAttributes, webRequest);

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,7 +20,6 @@ import java.util.Collections;
import java.util.Map; import java.util.Map;
import org.springframework.boot.web.error.ErrorAttributeOptions; import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.error.ErrorAttributeOptions.Include;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest; import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
@ -35,21 +34,6 @@ import org.springframework.web.servlet.ModelAndView;
*/ */
public interface ErrorAttributes { public interface ErrorAttributes {
/**
* Returns a {@link Map} of the error attributes. The map can be used as the model of
* an error page {@link ModelAndView}, or returned as a
* {@link ResponseBody @ResponseBody}.
* @param webRequest the source request
* @param includeStackTrace if stack trace element should be included
* @return a map of error attributes
* @deprecated since 2.3.0 in favor of
* {@link #getErrorAttributes(WebRequest, ErrorAttributeOptions)}
*/
@Deprecated
default Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
return Collections.emptyMap();
}
/** /**
* Returns a {@link Map} of the error attributes. The map can be used as the model of * Returns a {@link Map} of the error attributes. The map can be used as the model of
* an error page {@link ModelAndView}, or returned as a * an error page {@link ModelAndView}, or returned as a
@ -60,7 +44,7 @@ public interface ErrorAttributes {
* @since 2.3.0 * @since 2.3.0
*/ */
default Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) { default Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
return getErrorAttributes(webRequest, options.isIncluded(Include.STACK_TRACE)); return Collections.emptyMap();
} }
/** /**

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -26,16 +26,6 @@ import org.springframework.stereotype.Controller;
* @author Scott Frederick * @author Scott Frederick
* @since 2.0.0 * @since 2.0.0
*/ */
@FunctionalInterface
public interface ErrorController { public interface ErrorController {
/**
* The return value from this method is not used; the property `server.error.path`
* must be set to override the default error page path.
* @return the error path
* @deprecated since 2.3.0 in favor of setting the property `server.error.path`
*/
@Deprecated
String getErrorPath();
} }

@ -469,273 +469,331 @@
{ {
"name": "spring.jta.bitronix.connectionfactory.acquire-increment", "name": "spring.jta.bitronix.connectionfactory.acquire-increment",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Number of connections to create when growing the pool.", "deprecation": {
"defaultValue": 1 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.acquisition-interval", "name": "spring.jta.bitronix.connectionfactory.acquisition-interval",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Time, in seconds, to wait before trying to acquire a connection again after an invalid connection was acquired.", "deprecation": {
"defaultValue": 1 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.acquisition-timeout", "name": "spring.jta.bitronix.connectionfactory.acquisition-timeout",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Timeout, in seconds, for acquiring connections from the pool.", "deprecation": {
"defaultValue": 30 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.allow-local-transactions", "name": "spring.jta.bitronix.connectionfactory.allow-local-transactions",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether the transaction manager should allow mixing XA and non-XA transactions.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.apply-transaction-timeout", "name": "spring.jta.bitronix.connectionfactory.apply-transaction-timeout",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether the transaction timeout should be set on the XAResource when it is enlisted.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.automatic-enlisting-enabled", "name": "spring.jta.bitronix.connectionfactory.automatic-enlisting-enabled",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether resources should be enlisted and delisted automatically.", "deprecation": {
"defaultValue": true "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.cache-producers-consumers", "name": "spring.jta.bitronix.connectionfactory.cache-producers-consumers",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether producers and consumers should be cached.", "deprecation": {
"defaultValue": true "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.class-name", "name": "spring.jta.bitronix.connectionfactory.class-name",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Underlying implementation class name of the XA resource." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.defer-connection-release", "name": "spring.jta.bitronix.connectionfactory.defer-connection-release",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether the provider can run many transactions on the same connection and supports transaction interleaving.", "deprecation": {
"defaultValue": true "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.disabled", "name": "spring.jta.bitronix.connectionfactory.disabled",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether this resource is disabled, meaning it's temporarily forbidden to acquire a connection from its pool.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.driver-properties", "name": "spring.jta.bitronix.connectionfactory.driver-properties",
"type": "java.util.Properties", "type": "java.util.Properties",
"description": "Properties that should be set on the underlying implementation." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.ignore-recovery-failures", "name": "spring.jta.bitronix.connectionfactory.ignore-recovery-failures",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether recovery failures should be ignored.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.max-idle-time", "name": "spring.jta.bitronix.connectionfactory.max-idle-time",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Time, in seconds, after which connections are cleaned up from the pool.", "deprecation": {
"defaultValue": 60 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.max-pool-size", "name": "spring.jta.bitronix.connectionfactory.max-pool-size",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Maximum size of the pool. 0 denotes no limit.", "deprecation": {
"defaultValue": 0 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.min-pool-size", "name": "spring.jta.bitronix.connectionfactory.min-pool-size",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Minimum size of the pool.", "deprecation": {
"defaultValue": 0 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.password", "name": "spring.jta.bitronix.connectionfactory.password",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Password to use to connect to the JMS provider." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.share-transaction-connections", "name": "spring.jta.bitronix.connectionfactory.share-transaction-connections",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether connections in the ACCESSIBLE state can be shared within the context of a transaction.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.test-connections", "name": "spring.jta.bitronix.connectionfactory.test-connections",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether connections should be tested when acquired from the pool.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.two-pc-ordering-position", "name": "spring.jta.bitronix.connectionfactory.two-pc-ordering-position",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Position that this resource should take during two-phase commit (always first is Integer.MIN_VALUE, always last is Integer.MAX_VALUE).", "deprecation": {
"defaultValue": 1 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.unique-name", "name": "spring.jta.bitronix.connectionfactory.unique-name",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Unique name used to identify the resource during recovery.", "deprecation": {
"defaultValue": "jmsConnectionFactory" "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.use-tm-join", "name": "spring.jta.bitronix.connectionfactory.use-tm-join",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether TMJOIN should be used when starting XAResources.", "deprecation": {
"defaultValue": true "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.connectionfactory.user", "name": "spring.jta.bitronix.connectionfactory.user",
"type": "java.lang.String", "type": "java.lang.String",
"description": "User to use to connect to the JMS provider." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.acquire-increment", "name": "spring.jta.bitronix.datasource.acquire-increment",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Number of connections to create when growing the pool.", "deprecation": {
"defaultValue": 1 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.acquisition-interval", "name": "spring.jta.bitronix.datasource.acquisition-interval",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Time, in seconds, to wait before trying to acquire a connection again after an invalid connection was acquired.", "deprecation": {
"defaultValue": 1 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.acquisition-timeout", "name": "spring.jta.bitronix.datasource.acquisition-timeout",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Timeout, in seconds, for acquiring connections from the pool.", "deprecation": {
"defaultValue": 30 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.allow-local-transactions", "name": "spring.jta.bitronix.datasource.allow-local-transactions",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether the transaction manager should allow mixing XA and non-XA transactions.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.apply-transaction-timeout", "name": "spring.jta.bitronix.datasource.apply-transaction-timeout",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether the transaction timeout should be set on the XAResource when it is enlisted.", "deprecation": {
"defaultValue": "false" "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.automatic-enlisting-enabled", "name": "spring.jta.bitronix.datasource.automatic-enlisting-enabled",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether resources should be enlisted and delisted automatically.", "deprecation": {
"defaultValue": true "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.class-name", "name": "spring.jta.bitronix.datasource.class-name",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Underlying implementation class name of the XA resource." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.cursor-holdability", "name": "spring.jta.bitronix.datasource.cursor-holdability",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Default cursor holdability for connections." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.defer-connection-release", "name": "spring.jta.bitronix.datasource.defer-connection-release",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether the database can run many transactions on the same connection and supports transaction interleaving.", "deprecation": {
"defaultValue": true "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.disabled", "name": "spring.jta.bitronix.datasource.disabled",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether this resource is disabled, meaning it's temporarily forbidden to acquire a connection from its pool.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.driver-properties", "name": "spring.jta.bitronix.datasource.driver-properties",
"type": "java.util.Properties", "type": "java.util.Properties",
"description": "Properties that should be set on the underlying implementation." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.enable-jdbc4-connection-test", "name": "spring.jta.bitronix.datasource.enable-jdbc4-connection-test",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether Connection.isValid() is called when acquiring a connection from the pool.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.ignore-recovery-failures", "name": "spring.jta.bitronix.datasource.ignore-recovery-failures",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether recovery failures should be ignored.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.isolation-level", "name": "spring.jta.bitronix.datasource.isolation-level",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Default isolation level for connections." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.local-auto-commit", "name": "spring.jta.bitronix.datasource.local-auto-commit",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Default auto-commit mode for local transactions." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.login-timeout", "name": "spring.jta.bitronix.datasource.login-timeout",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Timeout, in seconds, for establishing a database connection." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.max-idle-time", "name": "spring.jta.bitronix.datasource.max-idle-time",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Time, in seconds, after which connections are cleaned up from the pool.", "deprecation": {
"defaultValue": 60 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.max-pool-size", "name": "spring.jta.bitronix.datasource.max-pool-size",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Maximum size of the pool. 0 denotes no limit.", "deprecation": {
"defaultValue": 0 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.min-pool-size", "name": "spring.jta.bitronix.datasource.min-pool-size",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Minimum size of the pool.", "deprecation": {
"defaultValue": 0 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.prepared-statement-cache-size", "name": "spring.jta.bitronix.datasource.prepared-statement-cache-size",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Target size of the prepared statement cache. 0 disables the cache.", "deprecation": {
"defaultValue": 0 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.share-transaction-connections", "name": "spring.jta.bitronix.datasource.share-transaction-connections",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether connections in the ACCESSIBLE state can be shared within the context of a transaction.", "deprecation": {
"defaultValue": false "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.test-query", "name": "spring.jta.bitronix.datasource.test-query",
"type": "java.lang.String", "type": "java.lang.String",
"description": "SQL query or statement used to validate a connection before returning it." "deprecation": {
"level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.two-pc-ordering-position", "name": "spring.jta.bitronix.datasource.two-pc-ordering-position",
"type": "java.lang.Integer", "type": "java.lang.Integer",
"description": "Position that this resource should take during two-phase commit (always first is Integer.MIN_VALUE, and always last is Integer.MAX_VALUE).", "deprecation": {
"defaultValue": 1 "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.unique-name", "name": "spring.jta.bitronix.datasource.unique-name",
"type": "java.lang.String", "type": "java.lang.String",
"description": "Unique name used to identify the resource during recovery.", "deprecation": {
"defaultValue": "dataSource" "level": "error"
}
}, },
{ {
"name": "spring.jta.bitronix.datasource.use-tm-join", "name": "spring.jta.bitronix.datasource.use-tm-join",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether TMJOIN should be used when starting XAResources.", "deprecation": {
"defaultValue": true "level": "error"
}
}, },
{ {
"name": "spring.main.allow-bean-definition-overriding", "name": "spring.main.allow-bean-definition-overriding",

@ -1,81 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import javax.jms.ConnectionFactory;
import javax.sql.DataSource;
import bitronix.tm.BitronixTransactionManager;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
/**
* Tests for {@link BitronixDependentBeanFactoryPostProcessor}.
*
* @author Phillip Webb
*/
@Deprecated
class BitronixDependentBeanFactoryPostProcessorTests {
private AnnotationConfigApplicationContext context;
@Test
void setsDependsOn() {
DefaultListableBeanFactory beanFactory = spy(new DefaultListableBeanFactory());
this.context = new AnnotationConfigApplicationContext(beanFactory);
this.context.register(Config.class);
this.context.refresh();
String name = "bitronixTransactionManager";
verify(beanFactory).registerDependentBean(name, "dataSource");
verify(beanFactory).registerDependentBean(name, "connectionFactory");
this.context.close();
}
@Configuration(proxyBeanMethods = false)
static class Config {
@Bean
DataSource dataSource() {
return mock(DataSource.class);
}
@Bean
ConnectionFactory connectionFactory() {
return mock(ConnectionFactory.class);
}
@Bean
BitronixTransactionManager bitronixTransactionManager() {
return mock(BitronixTransactionManager.class);
}
@Bean
static BitronixDependentBeanFactoryPostProcessor bitronixPostProcessor() {
return new BitronixDependentBeanFactoryPostProcessor();
}
}
}

@ -1,44 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import javax.jms.ConnectionFactory;
import javax.jms.XAConnectionFactory;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
/**
* Tests for {@link BitronixXAConnectionFactoryWrapper}.
*
* @author Phillip Webb
*/
@Deprecated
class BitronixXAConnectionFactoryWrapperTests {
@Test
void wrap() {
XAConnectionFactory connectionFactory = mock(XAConnectionFactory.class);
BitronixXAConnectionFactoryWrapper wrapper = new BitronixXAConnectionFactoryWrapper();
ConnectionFactory wrapped = wrapper.wrapConnectionFactory(connectionFactory);
assertThat(wrapped).isInstanceOf(PoolingConnectionFactoryBean.class);
assertThat(((PoolingConnectionFactoryBean) wrapped).getConnectionFactory()).isSameAs(connectionFactory);
}
}

@ -1,44 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import javax.sql.DataSource;
import javax.sql.XADataSource;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
/**
* Tests for {@link BitronixXADataSourceWrapper}.
*
* @author Phillip Webb
*/
@Deprecated
class BitronixXADataSourceWrapperTests {
@Test
void wrap() throws Exception {
XADataSource dataSource = mock(XADataSource.class);
BitronixXADataSourceWrapper wrapper = new BitronixXADataSourceWrapper();
DataSource wrapped = wrapper.wrapDataSource(dataSource);
assertThat(wrapped).isInstanceOf(PoolingDataSourceBean.class);
assertThat(((PoolingDataSourceBean) wrapped).getDataSource()).isSameAs(dataSource);
}
}

@ -1,77 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import javax.jms.XAConnectionFactory;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
/**
* Tests for {@link PoolingConnectionFactoryBean}.
*
* @author Phillip Webb
*/
@Deprecated
class PoolingConnectionFactoryBeanTests {
@SuppressWarnings("serial")
private PoolingConnectionFactoryBean bean = new PoolingConnectionFactoryBean() {
@Override
public synchronized void init() {
// Stub out for the tests
}
};
@Test
void sensibleDefaults() {
assertThat(this.bean.getMaxPoolSize()).isEqualTo(10);
assertThat(this.bean.getTestConnections()).isTrue();
assertThat(this.bean.getAutomaticEnlistingEnabled()).isTrue();
assertThat(this.bean.getAllowLocalTransactions()).isTrue();
}
@Test
void setsUniqueNameIfNull() throws Exception {
this.bean.setBeanName("beanName");
this.bean.afterPropertiesSet();
assertThat(this.bean.getUniqueName()).isEqualTo("beanName");
}
@Test
void doesNotSetUniqueNameIfNotNull() throws Exception {
this.bean.setBeanName("beanName");
this.bean.setUniqueName("un");
this.bean.afterPropertiesSet();
assertThat(this.bean.getUniqueName()).isEqualTo("un");
}
@Test
void setConnectionFactory() throws Exception {
XAConnectionFactory factory = mock(XAConnectionFactory.class);
this.bean.setConnectionFactory(factory);
this.bean.setBeanName("beanName");
this.bean.afterPropertiesSet();
this.bean.init();
this.bean.createPooledConnection(factory, this.bean);
verify(factory).createXAConnection();
}
}

@ -1,104 +0,0 @@
/*
* 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.
* 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.jta.bitronix;
import java.sql.Connection;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;
import javax.sql.XAConnection;
import javax.sql.XADataSource;
import bitronix.tm.TransactionManagerServices;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
/**
* Tests for {@link PoolingDataSourceBean}.
*
* @author Phillip Webb
*/
@Deprecated
class PoolingDataSourceBeanTests {
private PoolingDataSourceBean bean = new PoolingDataSourceBean();
@Test
void sensibleDefaults() {
assertThat(this.bean.getMaxPoolSize()).isEqualTo(10);
assertThat(this.bean.getAutomaticEnlistingEnabled()).isTrue();
assertThat(this.bean.isEnableJdbc4ConnectionTest()).isTrue();
}
@Test
void setsUniqueNameIfNull() throws Exception {
this.bean.setBeanName("beanName");
this.bean.afterPropertiesSet();
assertThat(this.bean.getUniqueName()).isEqualTo("beanName");
}
@Test
void doesNotSetUniqueNameIfNotNull() throws Exception {
this.bean.setBeanName("beanName");
this.bean.setUniqueName("un");
this.bean.afterPropertiesSet();
assertThat(this.bean.getUniqueName()).isEqualTo("un");
}
@Test
void shouldReturnGlobalLoggerWhenDataSourceIsAbsent() throws SQLFeatureNotSupportedException {
assertThat(this.bean.getParentLogger()).isSameAs(Logger.getLogger(Logger.GLOBAL_LOGGER_NAME));
}
@Test
void shouldReturnGlobalLoggerWhenDataSourceThrowsException() throws SQLFeatureNotSupportedException {
XADataSource dataSource = mock(XADataSource.class);
given(dataSource.getParentLogger()).willThrow(new SQLFeatureNotSupportedException());
this.bean.setDataSource(dataSource);
assertThat(this.bean.getParentLogger()).isSameAs(Logger.getLogger(Logger.GLOBAL_LOGGER_NAME));
}
@Test
void shouldReturnParentLoggerFromDataSource() throws SQLFeatureNotSupportedException {
Logger logger = Logger.getLogger("test");
XADataSource dataSource = mock(XADataSource.class);
given(dataSource.getParentLogger()).willReturn(logger);
this.bean.setDataSource(dataSource);
assertThat(this.bean.getParentLogger()).isSameAs(logger);
}
@Test
void setDataSource() throws Exception {
XADataSource dataSource = mock(XADataSource.class);
XAConnection xaConnection = mock(XAConnection.class);
Connection connection = mock(Connection.class);
given(dataSource.getXAConnection()).willReturn(xaConnection);
given(xaConnection.getConnection()).willReturn(connection);
this.bean.setDataSource(dataSource);
this.bean.setBeanName("beanName");
this.bean.afterPropertiesSet();
this.bean.init();
this.bean.createPooledConnection(dataSource, this.bean);
verify(dataSource).getXAConnection();
TransactionManagerServices.getTaskScheduler().shutdown();
}
}

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -164,19 +164,6 @@ class DefaultErrorAttributesTests {
assertThat(attributes.get("message")).isEqualTo("Test"); assertThat(attributes.get("message")).isEqualTo("Test");
} }
@Test
@SuppressWarnings("deprecation")
void excludeExceptionWithDeprecatedConstructor() {
RuntimeException error = new RuntimeException("Test");
this.errorAttributes = new DefaultErrorAttributes(false);
MockServerHttpRequest request = MockServerHttpRequest.get("/test").build();
ServerRequest serverRequest = buildServerRequest(request, error);
Map<String, Object> attributes = this.errorAttributes.getErrorAttributes(serverRequest,
ErrorAttributeOptions.of());
assertThat(this.errorAttributes.getError(serverRequest)).isSameAs(error);
assertThat(attributes.get("exception")).isNull();
}
@Test @Test
void processResponseStatusException() { void processResponseStatusException() {
RuntimeException nested = new RuntimeException("Test"); RuntimeException nested = new RuntimeException("Test");

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -231,17 +231,6 @@ class DefaultErrorAttributesTests {
assertThat(attributes.get("message")).isEqualTo("Test"); assertThat(attributes.get("message")).isEqualTo("Test");
} }
@Test
@SuppressWarnings("deprecation")
void excludeExceptionAttributeWithDeprecatedConstructor() {
DefaultErrorAttributes errorAttributes = new DefaultErrorAttributes(false);
RuntimeException ex = new RuntimeException("Test");
this.request.setAttribute("javax.servlet.error.exception", ex);
Map<String, Object> attributes = errorAttributes.getErrorAttributes(this.webRequest,
ErrorAttributeOptions.of());
assertThat(attributes.get("exception")).isNull();
}
@Test @Test
void withStackTraceAttribute() { void withStackTraceAttribute() {
RuntimeException ex = new RuntimeException("Test"); RuntimeException ex = new RuntimeException("Test");

@ -1,23 +0,0 @@
plugins {
id "java"
id "org.springframework.boot.conventions"
}
description = "Spring Boot Bitronix JTA smoke test"
dependencies {
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-artemis"))
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-data-jpa"))
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-jta-bitronix"))
if (JavaVersion.current().java9Compatible) {
implementation("jakarta.xml.bind:jakarta.xml.bind-api")
}
implementation("org.springframework:spring-jms")
runtimeOnly("com.h2database:h2")
runtimeOnly("org.apache.activemq:artemis-jms-server") {
exclude group: "org.apache.geronimo.specs", module: "geronimo-jms_2.0_spec"
}
testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
}

@ -1,43 +0,0 @@
/*
* Copyright 2012-2019 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 smoketest.bitronix;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Account {
@Id
@GeneratedValue
private Long id;
private String username;
Account() {
}
public Account(String username) {
this.username = username;
}
public String getUsername() {
return this.username;
}
}

@ -1,23 +0,0 @@
/*
* Copyright 2012-2019 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 smoketest.bitronix;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AccountRepository extends JpaRepository<Account, Long> {
}

@ -1,45 +0,0 @@
/*
* Copyright 2012-2019 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 smoketest.bitronix;
import javax.transaction.Transactional;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
@Service
@Transactional
public class AccountService {
private final JmsTemplate jmsTemplate;
private final AccountRepository accountRepository;
public AccountService(JmsTemplate jmsTemplate, AccountRepository accountRepository) {
this.jmsTemplate = jmsTemplate;
this.accountRepository = accountRepository;
}
public void createAccountAndNotify(String username) {
this.jmsTemplate.convertAndSend("accounts", username);
this.accountRepository.save(new Account(username));
if ("error".equals(username)) {
throw new RuntimeException("Simulated error");
}
}
}

@ -1,30 +0,0 @@
/*
* Copyright 2012-2019 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 smoketest.bitronix;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class Messages {
@JmsListener(destination = "accounts")
public void onMessage(String content) {
System.out.println("----> " + content);
}
}

@ -1,45 +0,0 @@
/*
* Copyright 2012-2019 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 smoketest.bitronix;
import java.io.Closeable;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class SampleBitronixApplication {
public static void main(String[] args) throws Exception {
ApplicationContext context = SpringApplication.run(SampleBitronixApplication.class, args);
AccountService service = context.getBean(AccountService.class);
AccountRepository repository = context.getBean(AccountRepository.class);
service.createAccountAndNotify("josh");
System.out.println("Count is " + repository.count());
try {
service.createAccountAndNotify("error");
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
System.out.println("Count is " + repository.count());
Thread.sleep(100);
((Closeable) context).close();
}
}

@ -1,68 +0,0 @@
/*
* Copyright 2012-2019 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 smoketest.bitronix;
import java.util.function.Consumer;
import bitronix.tm.resource.jms.PoolingConnectionFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.context.ApplicationContext;
import org.springframework.util.StringUtils;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Basic integration tests for demo application.
*
* @author Phillip Webb
*/
@ExtendWith(OutputCaptureExtension.class)
class SampleBitronixApplicationTests {
@Test
void testTransactionRollback(CapturedOutput output) throws Exception {
SampleBitronixApplication.main(new String[] {});
assertThat(output).satisfies(numberOfOccurrences("---->", 1));
assertThat(output).satisfies(numberOfOccurrences("----> josh", 1));
assertThat(output).satisfies(numberOfOccurrences("Count is 1", 2));
assertThat(output).satisfies(numberOfOccurrences("Simulated error", 1));
}
@Test
void testExposesXaAndNonXa() {
ApplicationContext context = SpringApplication.run(SampleBitronixApplication.class);
Object jmsConnectionFactory = context.getBean("jmsConnectionFactory");
Object xaJmsConnectionFactory = context.getBean("xaJmsConnectionFactory");
Object nonXaJmsConnectionFactory = context.getBean("nonXaJmsConnectionFactory");
assertThat(jmsConnectionFactory).isSameAs(xaJmsConnectionFactory);
assertThat(jmsConnectionFactory).isInstanceOf(PoolingConnectionFactory.class);
assertThat(nonXaJmsConnectionFactory).isNotInstanceOf(PoolingConnectionFactory.class);
}
private <T extends CharSequence> Consumer<T> numberOfOccurrences(String substring, int expectedCount) {
return (charSequence) -> {
int count = StringUtils.countOccurrencesOf(charSequence.toString(), substring);
assertThat(count).isEqualTo(expectedCount);
};
}
}
Loading…
Cancel
Save