From 50781ea1e8fa05a0da80f41144c0c838cf06ac9a Mon Sep 17 00:00:00 2001 From: lihengming <89921218@qq.com> Date: Sat, 23 Feb 2019 22:07:01 +0800 Subject: [PATCH 1/3] fix #1796, #3084 --- .../autoconfigure/DruidDataSourceBuilder.java | 4 ++++ .../autoconfigure/DruidDataSourceWrapper.java | 20 ++++++++++++++++--- .../demo/configurer/Issue1796Configurer.java | 15 +++++++------- .../boot/testcase/Issue1796TestCase.java | 2 ++ .../application-issue-1796.properties | 2 +- 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java index 2e686428e8..024325edc6 100644 --- a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java +++ b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java @@ -40,7 +40,11 @@ public class DruidDataSourceBuilder { *
* 这是为了兼容 Spring Boot 1.X 中 .properties 内配置属性不能按照配置声明顺序进行绑定,进而导致配置出错(issue #1796 )而提供的方法。 * 如果你不存在上述问题或者使用 .yml 进行配置则不必使用该方法,使用上面的{@link DruidDataSourceBuilder#build}即可,Spring Boot 2.0 修复了该问题,该方法届时也会停用。 + * + * fixed, the method will be removed in future versions. + * @see DruidDataSourceWrapper#setMaxEvictableIdleTimeMillis(long) */ + @Deprecated public DruidDataSource build(Environment env, String prefix) { DruidDataSource druidDataSource = new DruidDataSourceWrapper(); druidDataSource.setMinEvictableIdleTimeMillis( diff --git a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceWrapper.java b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceWrapper.java index 3ba3d9a873..2625502bfa 100644 --- a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceWrapper.java +++ b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceWrapper.java @@ -50,10 +50,9 @@ class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean if (super.getUrl() == null) { super.setUrl(basicProperties.determineUrl()); } - if(super.getDriverClassName() == null){ + if (super.getDriverClassName() == null) { super.setDriverClassName(basicProperties.getDriverClassName()); } - } @Autowired(required = false) @@ -96,5 +95,20 @@ class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean super.filters.add(wallFilter); } - + /** + * Ignore the 'maxEvictableIdleTimeMillis < minEvictableIdleTimeMillis' validate, + * it will be validated again in {@link DruidDataSource#init()}. + * + * for fix issue #3084, #2763 + * + * @since 1.1.14 + */ + @Override + public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) { + try { + super.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + } catch (IllegalArgumentException ignore) { + super.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis; + } + } } diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/Issue1796Configurer.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/Issue1796Configurer.java index fd59f8b092..8353b2f3b8 100644 --- a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/Issue1796Configurer.java +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/Issue1796Configurer.java @@ -1,15 +1,14 @@ package com.alibaba.druid.spring.boot.demo.configurer; -import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.core.env.Environment; - import javax.sql.DataSource; -@Configuration -@Profile("issue-1796") +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; + +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; + +/*@Configuration +@Profile("issue-1796")*/ public class Issue1796Configurer { @Bean diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/Issue1796TestCase.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/Issue1796TestCase.java index efa3847c59..4d3a50e118 100644 --- a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/Issue1796TestCase.java +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/Issue1796TestCase.java @@ -15,6 +15,8 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author lihengming [89921218@qq.com] + * + * for issue #1796, #3084, #2763 */ @RunWith(SpringRunner.class) @SpringBootTest(classes = DemoApplication.class) diff --git a/druid-spring-boot-starter/src/test/resources/application-issue-1796.properties b/druid-spring-boot-starter/src/test/resources/application-issue-1796.properties index 7a29d17535..00cf5dc0ca 100644 --- a/druid-spring-boot-starter/src/test/resources/application-issue-1796.properties +++ b/druid-spring-boot-starter/src/test/resources/application-issue-1796.properties @@ -5,8 +5,8 @@ spring.datasource.password=sa # driver-class-name 非必填可根据url推断 spring.datasource.driver-class-name=org.h2.Driver -spring.datasource.druid.min-evictable-idle-time-millis=100000 spring.datasource.druid.max-evictable-idle-time-millis=200000 +spring.datasource.druid.min-evictable-idle-time-millis=100000 # JPA spring.jpa.show-sql= true From ba74a38e3968365306d124c0c756f68d8a7df8b2 Mon Sep 17 00:00:00 2001 From: lihengming <89921218@qq.com> Date: Sat, 23 Feb 2019 22:25:18 +0800 Subject: [PATCH 2/3] update comment --- .../spring/boot/autoconfigure/DruidDataSourceBuilder.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java index 024325edc6..2e8cf2343c 100644 --- a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java +++ b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java @@ -30,6 +30,9 @@ public class DruidDataSourceBuilder { /** * For build multiple DruidDataSource, detail see document. + * + * ------- + * The API is history, and now you can use 'new DruidDataSourceWrapper()' instead. */ public DruidDataSource build() { return new DruidDataSourceWrapper(); From 0a0694524e0fb4218c17dbf47e864de197b5aaf6 Mon Sep 17 00:00:00 2001 From: lihengming <89921218@qq.com> Date: Sat, 23 Feb 2019 22:25:52 +0800 Subject: [PATCH 3/3] update comment --- .../druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java index 2e8cf2343c..7384e2f5d7 100644 --- a/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java +++ b/druid-spring-boot-starter/src/main/java/com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceBuilder.java @@ -32,7 +32,7 @@ public class DruidDataSourceBuilder { * For build multiple DruidDataSource, detail see document. * * ------- - * The API is history, and now you can use 'new DruidDataSourceWrapper()' instead. + * The method is history, and now you can use 'new DruidDataSourceWrapper()' instead. */ public DruidDataSource build() { return new DruidDataSourceWrapper();