From 23596d10a823d8089dac5aeeccb4a53d5f8f8e50 Mon Sep 17 00:00:00 2001 From: lihengming <89921218@qq.com> Date: Sun, 23 Jul 2017 20:41:46 +0800 Subject: [PATCH] add > test case for V1.1.2 --- .../boot/demo/configurer/InitConfigurer.java | 23 +++++++ .../demo/configurer/Issue1796Configurer.java | 21 ++++++ .../configurer/MultiDataSourceConfigurer.java | 26 +++++++ .../boot/demo/service/UserServiceImpl.java | 9 +-- .../DruidDataSourceTestCase.java | 11 +-- .../boot/testcase/DruidFilterTestCase.java | 32 +++++++++ .../DruidMultiDataSourceTestCase.java | 68 +++++++++++++++++++ .../boot/testcase/Issue1796TestCase.java | 35 ++++++++++ .../resources/application-filter.properties | 16 +++++ .../application-issue-1796.properties | 13 ++++ .../application-multi-datasource.properties | 27 ++++++++ .../src/test/resources/application.properties | 29 ++++++-- .../test/resources/config-template.properties | 2 + 13 files changed, 294 insertions(+), 18 deletions(-) create mode 100644 druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/InitConfigurer.java create mode 100644 druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/Issue1796Configurer.java create mode 100644 druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/MultiDataSourceConfigurer.java rename druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/{ => testcase}/DruidDataSourceTestCase.java (93%) create mode 100644 druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidFilterTestCase.java create mode 100644 druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidMultiDataSourceTestCase.java create mode 100644 druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/Issue1796TestCase.java create mode 100644 druid-spring-boot-starter/src/test/resources/application-filter.properties create mode 100644 druid-spring-boot-starter/src/test/resources/application-issue-1796.properties create mode 100644 druid-spring-boot-starter/src/test/resources/application-multi-datasource.properties diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/InitConfigurer.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/InitConfigurer.java new file mode 100644 index 0000000000..98fccb13b0 --- /dev/null +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/InitConfigurer.java @@ -0,0 +1,23 @@ +package com.alibaba.druid.spring.boot.demo.configurer; + +import com.alibaba.druid.spring.boot.demo.dao.UserDao; +import com.alibaba.druid.spring.boot.demo.model.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +import javax.annotation.PostConstruct; + +@Configuration +@Profile("default") +public class InitConfigurer{ + @Autowired + private UserDao userDao; + + @PostConstruct + public void init(){ + for (int i = 1; i <= 100; i++) { + userDao.save(new User("TEST-NAME-" + i)); + } + } +} 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 new file mode 100644 index 0000000000..fd59f8b092 --- /dev/null +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/Issue1796Configurer.java @@ -0,0 +1,21 @@ +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") +public class Issue1796Configurer { + + @Bean + public DataSource dataSource(Environment environment) { + return DruidDataSourceBuilder + .create() + .build(environment, "spring.datasource.druid."); + } +} diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/MultiDataSourceConfigurer.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/MultiDataSourceConfigurer.java new file mode 100644 index 0000000000..7235a0aa5a --- /dev/null +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/configurer/MultiDataSourceConfigurer.java @@ -0,0 +1,26 @@ +package com.alibaba.druid.spring.boot.demo.configurer; + +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Profile; + +import javax.sql.DataSource; + +@Configuration +@Profile("multi-datasource") +public class MultiDataSourceConfigurer { + @Primary + @Bean + @ConfigurationProperties("spring.datasource.druid.one") + public DataSource dataSourceOne(){ + return DruidDataSourceBuilder.create().build(); + } + @Bean + @ConfigurationProperties("spring.datasource.druid.two") + public DataSource dataSourceTwo(){ + return DruidDataSourceBuilder.create().build(); + } +} diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/service/UserServiceImpl.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/service/UserServiceImpl.java index d6cac398cf..3d0b5843a5 100644 --- a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/service/UserServiceImpl.java +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/demo/service/UserServiceImpl.java @@ -3,12 +3,11 @@ package com.alibaba.druid.spring.boot.demo.service; import com.alibaba.druid.spring.boot.demo.dao.UserDao; import com.alibaba.druid.spring.boot.demo.model.User; -import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service -public class UserServiceImpl implements UserService,InitializingBean { +public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @@ -17,10 +16,4 @@ public class UserServiceImpl implements UserService,InitializingBean { return userDao.findOne(id); } - @Override - public void afterPropertiesSet() throws Exception { - for (int i = 1; i <= 100; i++) { - userDao.save(new User("TEST-NAME-" + i)); - } - } } diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/DruidDataSourceTestCase.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidDataSourceTestCase.java similarity index 93% rename from druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/DruidDataSourceTestCase.java rename to druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidDataSourceTestCase.java index 56a179be16..5133903cfe 100644 --- a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/DruidDataSourceTestCase.java +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidDataSourceTestCase.java @@ -13,7 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.spring.boot; +package com.alibaba.druid.spring.boot.testcase; + import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import org.junit.Test; @@ -62,8 +63,8 @@ public class DruidDataSourceTestCase { EnvironmentTestUtils.addEnvironment(this.context, PREFIX + "test-on-return=true"); EnvironmentTestUtils.addEnvironment(this.context, PREFIX + "time-between-eviction-runs-millis=10000"); EnvironmentTestUtils.addEnvironment(this.context, PREFIX + "min-evictable-idle-time-millis=12345"); - EnvironmentTestUtils.addEnvironment(this.context, PREFIX + "max-evictable-idle-time-millis=123456"); - EnvironmentTestUtils.addEnvironment(this.context, PREFIX + "filters=stat,log4j"); + EnvironmentTestUtils.addEnvironment(this.context, PREFIX + "connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000"); + EnvironmentTestUtils.addEnvironment(this.context, PREFIX + "async-close-connection-enable=true"); this.context.refresh(); DruidDataSource ds = this.context.getBean(DruidDataSource.class); @@ -83,8 +84,8 @@ public class DruidDataSourceTestCase { assertThat(ds.isTestOnReturn()).isTrue(); assertThat(ds.getTimeBetweenEvictionRunsMillis()).isEqualTo(10000); assertThat(ds.getMinEvictableIdleTimeMillis()).isEqualTo(12345); - assertThat(ds.getMaxEvictableIdleTimeMillis()).isEqualTo(123456); - assertThat(ds.getProxyFilters().size()).isEqualTo(2); + assertThat(ds.getConnectProperties().size()).isEqualTo(2); + assertThat(ds.isAsyncCloseConnectionEnable()).isEqualTo(true); } diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidFilterTestCase.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidFilterTestCase.java new file mode 100644 index 0000000000..416dd0128b --- /dev/null +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidFilterTestCase.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.spring.boot.testcase; + +import com.alibaba.druid.filter.Filter; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.demo.DemoApplication; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author lihengming [89921218@qq.com] + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = DemoApplication.class) +@ActiveProfiles("filter") +public class DruidFilterTestCase { + @Resource + private DruidDataSource dataSource; + + @Test + public void test() { + List filters = dataSource.getProxyFilters(); + assertThat(filters.size()).isEqualTo(4); + } +} diff --git a/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidMultiDataSourceTestCase.java b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidMultiDataSourceTestCase.java new file mode 100644 index 0000000000..ca15b0af41 --- /dev/null +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/DruidMultiDataSourceTestCase.java @@ -0,0 +1,68 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * 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 + * + * http://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 com.alibaba.druid.spring.boot.testcase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.demo.DemoApplication; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author lihengming [89921218@qq.com] + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = DemoApplication.class) +@ActiveProfiles("multi-datasource") +public class DruidMultiDataSourceTestCase { + + @Resource + private DruidDataSource dataSourceOne; + @Resource + private DruidDataSource dataSourceTwo; + + @Test + public void testDataSourceOne() { + assertThat(dataSourceOne.getUrl()).isEqualTo("jdbc:h2:file:./demo-db"); + assertThat(dataSourceOne.getUsername()).isEqualTo("sa"); + assertThat(dataSourceOne.getPassword()).isEqualTo("sa"); + assertThat(dataSourceOne.getDriverClassName()).isEqualTo("org.h2.Driver"); + + assertThat(dataSourceOne.getInitialSize()).isEqualTo(5); + + assertThat(dataSourceOne.getMaxActive()).isEqualTo(10); + assertThat(dataSourceOne.getMaxWait()).isEqualTo(10000); + } + @Test + public void testDataSourceTwo() { + assertThat(dataSourceTwo.getUrl()).isEqualTo("jdbc:h2:file:./demo-db"); + assertThat(dataSourceTwo.getUsername()).isEqualTo("sa"); + assertThat(dataSourceTwo.getPassword()).isEqualTo("sa"); + assertThat(dataSourceTwo.getDriverClassName()).isEqualTo("org.h2.Driver"); + + assertThat(dataSourceTwo.getInitialSize()).isEqualTo(5); + + assertThat(dataSourceTwo.getMaxActive()).isEqualTo(20); + assertThat(dataSourceTwo.getMaxWait()).isEqualTo(20000); + } + +} 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 new file mode 100644 index 0000000000..8bace93387 --- /dev/null +++ b/druid-spring-boot-starter/src/test/java/com/alibaba/druid/spring/boot/testcase/Issue1796TestCase.java @@ -0,0 +1,35 @@ +package com.alibaba.druid.spring.boot.testcase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.demo.DemoApplication; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author lihengming [89921218@qq.com] + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = DemoApplication.class) +@ActiveProfiles("issue-1796") +public class Issue1796TestCase { + @Resource + private DruidDataSource dataSource; + + @Test + public void test() { + assertThat(dataSource.getUrl()).isEqualTo("jdbc:h2:file:./demo-db"); + assertThat(dataSource.getUsername()).isEqualTo("sa"); + assertThat(dataSource.getPassword()).isEqualTo("sa"); + assertThat(dataSource.getDriverClassName()).isEqualTo("org.h2.Driver"); + + assertThat(dataSource.getMinEvictableIdleTimeMillis()).isEqualTo(100000); + assertThat(dataSource.getMaxEvictableIdleTimeMillis()).isEqualTo(200000); + } +} diff --git a/druid-spring-boot-starter/src/test/resources/application-filter.properties b/druid-spring-boot-starter/src/test/resources/application-filter.properties new file mode 100644 index 0000000000..aa19066789 --- /dev/null +++ b/druid-spring-boot-starter/src/test/resources/application-filter.properties @@ -0,0 +1,16 @@ +# 只有下面三个是必填项,其他配置不是必须的 +spring.datasource.url=jdbc:h2:file:./demo-db +spring.datasource.username=sa +spring.datasource.password=sa +# driver-class-name 非必填可根据url推断 +spring.datasource.driver-class-name=org.h2.Driver + +spring.datasource.druid.filter.stat.enabled=true +spring.datasource.druid.filter.config.enabled=true +spring.datasource.druid.filter.encoding.enabled=true +spring.datasource.druid.filter.wall.enabled=true + + +# JPA +spring.jpa.show-sql= true +spring.jpa.hibernate.ddl-auto=create-drop \ No newline at end of file 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 new file mode 100644 index 0000000000..7a29d17535 --- /dev/null +++ b/druid-spring-boot-starter/src/test/resources/application-issue-1796.properties @@ -0,0 +1,13 @@ +# 只有下面三个是必填项,其他配置不是必须的 +spring.datasource.url=jdbc:h2:file:./demo-db +spring.datasource.username=sa +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 + +# JPA +spring.jpa.show-sql= true +spring.jpa.hibernate.ddl-auto=create-drop \ No newline at end of file diff --git a/druid-spring-boot-starter/src/test/resources/application-multi-datasource.properties b/druid-spring-boot-starter/src/test/resources/application-multi-datasource.properties new file mode 100644 index 0000000000..2c9120e4d9 --- /dev/null +++ b/druid-spring-boot-starter/src/test/resources/application-multi-datasource.properties @@ -0,0 +1,27 @@ +# 只有下面三个是必填项,其他配置不是必须的 +spring.datasource.url=jdbc:h2:file:./demo-db +spring.datasource.username=sa +spring.datasource.password=sa +# driver-class-name 非必填可根据url推断 +spring.datasource.driver-class-name=org.h2.Driver + +# Druid 数据源配置,继承spring.datasource.* 配置,相同则覆盖 +spring.datasource.druid.initial-size=5 +spring.datasource.druid.max-active=5 +spring.datasource.druid.aop-patterns=com.alibaba.druid.spring.boot.demo.service.* + +# Druid 数据源 1 配置,继承spring.datasource.druid.* 配置,相同则覆盖 +spring.datasource.druid.one.max-active=10 +spring.datasource.druid.one.max-wait=10000 + +# Druid 数据源 2 配置,继承spring.datasource.druid.* 配置,相同则覆盖 +spring.datasource.druid.two.max-active=20 +spring.datasource.druid.two.max-wait=20000 + +# JPA +spring.jpa.show-sql=true +spring.jpa.hibernate.ddl-auto=create-drop + +# 更多配置属性见 DruidDataSource 内成员变量(只要有set方法便支持),或者根据IDE提示,或者查看官方文档 + +# 注:配置文件可以根据习惯更换为 .yml diff --git a/druid-spring-boot-starter/src/test/resources/application.properties b/druid-spring-boot-starter/src/test/resources/application.properties index 6c564d9f3e..a9ab55f8f8 100644 --- a/druid-spring-boot-starter/src/test/resources/application.properties +++ b/druid-spring-boot-starter/src/test/resources/application.properties @@ -1,14 +1,33 @@ -# JDBC +# 只有下面三个是必填项,其他配置不是必须的 spring.datasource.url=jdbc:h2:file:./demo-db spring.datasource.username=sa spring.datasource.password=sa +# driver-class-name 非必填可根据url推断 spring.datasource.driver-class-name=org.h2.Driver -#启用Spring关联监控配置 -spring.datasource.druid.aop-patterns=com.alibaba.druid.spring.boot.demo.service.* -#其他配置,参考config-template.properties -spring.datasource.druid.max-active=11 + +#Druid 数据源配置,继承spring.datasource.* 配置,相同则覆盖 +spring.datasource.druid.username=sa +spring.datasource.druid.password=sa spring.datasource.druid.initial-size=5 +spring.datasource.druid.max-active=10 +spring.datasource.druid.min-evictable-idle-time-millis=100000 +spring.datasource.druid.aop-patterns=com.alibaba.druid.spring.boot.demo.service.* + +# 自定义StatFilter 配置 +spring.datasource.druid.filter.stat.db-type=h2 +spring.datasource.druid.filter.stat.log-slow-sql=true +spring.datasource.druid.filter.stat.slow-sql-millis=2000 + +# 自定义WallFilter 配置,其他 Filter 不再演示 +spring.datasource.druid.filter.wall.enabled=true +spring.datasource.druid.filter.wall.db-type=h2 +spring.datasource.druid.filter.wall.config.delete-allow=false +spring.datasource.druid.filter.wall.config.drop-table-allow=false + # JPA spring.jpa.show-sql= true spring.jpa.hibernate.ddl-auto=create-drop +# 更多配置属性见 DruidDataSource 内成员变量(只要有set方法便支持),或者根据IDE提示,或者查看官方文档 + +# 注:配置文件可以根据习惯更换为 .yml diff --git a/druid-spring-boot-starter/src/test/resources/config-template.properties b/druid-spring-boot-starter/src/test/resources/config-template.properties index aabc89ec20..2a33418c62 100644 --- a/druid-spring-boot-starter/src/test/resources/config-template.properties +++ b/druid-spring-boot-starter/src/test/resources/config-template.properties @@ -22,6 +22,8 @@ spring.datasource.druid.time-between-eviction-runs-millis= spring.datasource.druid.min-evictable-idle-time-millis= spring.datasource.druid.max-evictable-idle-time-millis= spring.datasource.druid.filters= #默认值stat,配置多个英文逗号分隔 +... +# 更多配置属性见 DruidDataSource 内成员变量(只要有set方法便支持),或者根据IDE提示,或者查看官方文档 ######Druid监控配置###### #下面配置说明请参考Druid Github Wiki,配置_配置WebStatFilter