From cf28663cd73935f15b8f90fba6aed40d90f2f5a1 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 5 Oct 2016 15:21:09 +0200 Subject: [PATCH] Deprecate commons-dbcp 1 Closes gh-6787 --- spring-boot-actuator/pom.xml | 4 ++-- .../PublicMetricsAutoConfigurationTests.java | 2 +- .../autoconfigure/jdbc/DataSourceBuilder.java | 2 +- .../jdbc/DataSourceConfiguration.java | 1 + .../CommonsDbcpDataSourcePoolMetadata.java | 3 ++- ...ourcePoolMetadataProvidersConfiguration.java | 17 +++++++++-------- ...CommonsDbcpDataSourceConfigurationTests.java | 1 + .../jdbc/DataSourceAutoConfigurationTests.java | 15 +++++++++------ .../JdbcTemplateAutoConfigurationTests.java | 2 +- .../JndiDataSourceAutoConfigurationTests.java | 3 ++- .../boot/autoconfigure/jdbc/TestDataSource.java | 2 +- .../CommonsDbcpDataSourcePoolMetadataTests.java | 1 + .../appendix-application-properties.adoc | 1 - .../src/main/asciidoc/spring-boot-features.adoc | 8 ++++---- 14 files changed, 35 insertions(+), 27 deletions(-) diff --git a/spring-boot-actuator/pom.xml b/spring-boot-actuator/pom.xml index 4b9316e1a31..7434a07c059 100644 --- a/spring-boot-actuator/pom.xml +++ b/spring-boot-actuator/pom.xml @@ -269,8 +269,8 @@ true - commons-dbcp - commons-dbcp + org.apache.commons + commons-dbcp2 true diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java index aeaa626c3c4..088b8824eaf 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/PublicMetricsAutoConfigurationTests.java @@ -26,7 +26,7 @@ import java.util.Map; import javax.sql.DataSource; import com.zaxxer.hikari.HikariDataSource; -import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp2.BasicDataSource; import org.junit.After; import org.junit.Test; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java index 76281360384..d5e4b688ce4 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceBuilder.java @@ -44,7 +44,7 @@ public class DataSourceBuilder { private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] { "org.apache.tomcat.jdbc.pool.DataSource", "com.zaxxer.hikari.HikariDataSource", - "org.apache.commons.dbcp.BasicDataSource", + "org.apache.commons.dbcp.BasicDataSource", //deprecated "org.apache.commons.dbcp2.BasicDataSource" }; private Class type; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java index 9f5c0d30872..72e51ed7334 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java @@ -77,6 +77,7 @@ abstract class DataSourceConfiguration { @ConditionalOnClass(org.apache.commons.dbcp.BasicDataSource.class) @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.commons.dbcp.BasicDataSource", matchIfMissing = true) + @Deprecated static class Dbcp extends DataSourceConfiguration { @Bean diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadata.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadata.java index 064a824652d..fa1b776feaa 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadata.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2016 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. @@ -26,6 +26,7 @@ import org.apache.commons.dbcp.BasicDataSource; * @author Stephane Nicoll * @since 1.2.0 */ +@Deprecated public class CommonsDbcpDataSourcePoolMetadata extends AbstractDataSourcePoolMetadata { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java index 37504655b25..fc0ed7ca4ec 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ package org.springframework.boot.autoconfigure.jdbc.metadata; import javax.sql.DataSource; import com.zaxxer.hikari.HikariDataSource; -import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp2.BasicDataSource; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; @@ -78,7 +78,8 @@ public class DataSourcePoolMetadataProvidersConfiguration { } @Configuration - @ConditionalOnClass(BasicDataSource.class) + @ConditionalOnClass(org.apache.commons.dbcp.BasicDataSource.class) + @Deprecated static class CommonsDbcpPoolDataSourceMetadataProviderConfiguration { @Bean @@ -87,9 +88,9 @@ public class DataSourcePoolMetadataProvidersConfiguration { @Override public DataSourcePoolMetadata getDataSourcePoolMetadata( DataSource dataSource) { - if (dataSource instanceof BasicDataSource) { + if (dataSource instanceof org.apache.commons.dbcp.BasicDataSource) { return new CommonsDbcpDataSourcePoolMetadata( - (BasicDataSource) dataSource); + (org.apache.commons.dbcp.BasicDataSource) dataSource); } return null; } @@ -99,7 +100,7 @@ public class DataSourcePoolMetadataProvidersConfiguration { } @Configuration - @ConditionalOnClass(org.apache.commons.dbcp2.BasicDataSource.class) + @ConditionalOnClass(BasicDataSource.class) static class CommonsDbcp2PoolDataSourceMetadataProviderConfiguration { @Bean @@ -108,9 +109,9 @@ public class DataSourcePoolMetadataProvidersConfiguration { @Override public DataSourcePoolMetadata getDataSourcePoolMetadata( DataSource dataSource) { - if (dataSource instanceof org.apache.commons.dbcp2.BasicDataSource) { + if (dataSource instanceof BasicDataSource) { return new CommonsDbcp2DataSourcePoolMetadata( - (org.apache.commons.dbcp2.BasicDataSource) dataSource); + (BasicDataSource) dataSource); } return null; } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceConfigurationTests.java index 79fbe692ae7..0735ba0f8b1 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/CommonsDbcpDataSourceConfigurationTests.java @@ -37,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Dave Syer * @author Stephane Nicoll */ +@Deprecated public class CommonsDbcpDataSourceConfigurationTests { private static final String PREFIX = "spring.datasource.dbcp."; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java index ccea644b9bf..5842663f256 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java @@ -30,7 +30,7 @@ import java.util.logging.Logger; import javax.sql.DataSource; import com.zaxxer.hikari.HikariDataSource; -import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp2.BasicDataSource; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -138,15 +138,19 @@ public class DataSourceAutoConfigurationTests { } @Test + @Deprecated public void commonsDbcpIsFallback() throws Exception { - BasicDataSource dataSource = autoConfigureDataSource(BasicDataSource.class, + org.apache.commons.dbcp.BasicDataSource dataSource = autoConfigureDataSource( + org.apache.commons.dbcp.BasicDataSource.class, "org.apache.tomcat", "com.zaxxer.hikari"); assertThat(dataSource.getUrl()).isEqualTo("jdbc:hsqldb:mem:testdb"); } @Test + @Deprecated public void commonsDbcpValidatesConnectionByDefault() { - BasicDataSource dataSource = autoConfigureDataSource(BasicDataSource.class, + org.apache.commons.dbcp.BasicDataSource dataSource = autoConfigureDataSource( + org.apache.commons.dbcp.BasicDataSource.class, "org.apache.tomcat", "com.zaxxer.hikari"); assertThat(dataSource.getTestOnBorrow()).isTrue(); assertThat(dataSource.getValidationQuery()) @@ -155,9 +159,8 @@ public class DataSourceAutoConfigurationTests { @Test public void commonsDbcp2IsFallback() throws Exception { - org.apache.commons.dbcp2.BasicDataSource dataSource = autoConfigureDataSource( - org.apache.commons.dbcp2.BasicDataSource.class, "org.apache.tomcat", - "com.zaxxer.hikari", "org.apache.commons.dbcp."); + BasicDataSource dataSource = autoConfigureDataSource(BasicDataSource.class, + "org.apache.tomcat", "com.zaxxer.hikari", "org.apache.commons.dbcp."); assertThat(dataSource.getUrl()).isEqualTo("jdbc:hsqldb:mem:testdb"); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JdbcTemplateAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JdbcTemplateAutoConfigurationTests.java index 58a6caf36c4..a4ff2b1c339 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JdbcTemplateAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JdbcTemplateAutoConfigurationTests.java @@ -20,7 +20,7 @@ import java.util.Random; import javax.sql.DataSource; -import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp2.BasicDataSource; import org.junit.After; import org.junit.Before; import org.junit.Test; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JndiDataSourceAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JndiDataSourceAutoConfigurationTests.java index 3e9c33e01aa..e5cfcc225d9 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JndiDataSourceAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/JndiDataSourceAutoConfigurationTests.java @@ -36,6 +36,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.jmx.export.MBeanExporter; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * Tests for {@link JndiDataSourceAutoConfiguration} @@ -120,7 +121,7 @@ public class JndiDataSourceAutoConfigurationTests { @Test public void standardDataSourceIsNotExcludedFromExport() throws IllegalStateException, NamingException { - DataSource dataSource = new org.apache.commons.dbcp.BasicDataSource(); + DataSource dataSource = mock(DataSource.class); configureJndi("foo", dataSource); this.context = new AnnotationConfigApplicationContext(); diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestDataSource.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestDataSource.java index 8e69d63ced8..16656f8e81e 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestDataSource.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestDataSource.java @@ -16,7 +16,7 @@ package org.springframework.boot.autoconfigure.jdbc; -import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp2.BasicDataSource; /** * {@link BasicDataSource} used for testing. diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadataTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadataTests.java index d7a9a6560eb..a6ac3220d84 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadataTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/metadata/CommonsDbcpDataSourcePoolMetadataTests.java @@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Stephane Nicoll */ +@Deprecated public class CommonsDbcpDataSourcePoolMetadataTests extends AbstractDataSourcePoolMetadataTests { diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index dbad75665f5..c42b5636808 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -594,7 +594,6 @@ content into your application; rather pick only the properties that you need. spring.datasource.data= # Data (DML) script resource reference. spring.datasource.data-username= # User of the database to execute DML scripts (if different). spring.datasource.data-password= # Password of the database to execute DML scripts (if different). - spring.datasource.dbcp.*= # Commons DBCP specific settings spring.datasource.dbcp2.*= # Commons DBCP2 specific settings spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto-detected based on the URL by default. spring.datasource.hikari.*= # Hikari specific settings diff --git a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 2825236a91f..f24fd4bd739 100644 --- a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -2690,7 +2690,8 @@ Here's the algorithm for choosing a specific implementation: that is available we always choose it. * Otherwise, if HikariCP is available we will use it. * If neither the Tomcat pooling datasource nor HikariCP are available and if Commons DBCP - is available we will use it, but we don't recommend it in production. + is available we will use it, but we don't recommend it in production and its support + is deprecated. * Lastly, if Commons DBCP2 is available we will use it. If you use the `spring-boot-starter-jdbc` or `spring-boot-starter-data-jpa` @@ -2730,9 +2731,8 @@ See {sc-spring-boot-autoconfigure}/jdbc/DataSourceProperties.{sc-ext}[`DataSourc for more of the supported options. These are the standard options that work regardless of the actual implementation. It is also possible to fine-tune implementation-specific settings using their respective prefix (`+spring.datasource.tomcat.*+`, -`+spring.datasource.hikari.*+`, `+spring.datasource.dbcp.*+` and -`+spring.datasource.dbcp2.*+`). Refer to the documentation of the connection pool -implementation you are using for more details. +`+spring.datasource.hikari.*+`, and `+spring.datasource.dbcp2.*+`). Refer to the +documentation of the connection pool implementation you are using for more details. For instance, if you are using the http://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Common_Attributes[Tomcat connection pool]