This commit is contained in:
trang
2017-11-16 17:15:47 +08:00
parent dd60031bdd
commit 22ee85dc69
16 changed files with 88 additions and 37 deletions
@@ -7,7 +7,7 @@
<parent>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
</parent>
<artifactId>druid-spring-boot-actuator-autoconfigure</artifactId>
+1 -1
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
</parent>
<artifactId>druid-spring-boot-actuator-starter</artifactId>
+1 -1
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
</parent>
<artifactId>druid-spring-boot-actuator</artifactId>
+1 -1
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
</parent>
<artifactId>druid-spring-boot-autoconfigure</artifactId>
@@ -9,12 +9,13 @@ import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;
import com.github.trang.druid.autoconfigure.datasource.DruidDataSource2;
import com.github.trang.druid.autoconfigure.properties.DruidDataSourceProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
@@ -23,8 +24,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import javax.sql.DataSource;
import org.springframework.core.env.ConfigurableEnvironment;
import static com.github.trang.druid.autoconfigure.properties.DruidDataSourceProperties.*;
@@ -39,7 +39,7 @@ import static com.github.trang.druid.autoconfigure.properties.DruidDataSourcePro
@EnableConfigurationProperties({DataSourceProperties.class, DruidDataSourceProperties.class})
@Import({DruidServletConfiguration.class, DruidStatConfiguration.class})
@Slf4j
public class DruidAutoConfiguration {
public class DruidAutoConfiguration implements InitializingBean {
@Bean
@ConditionalOnProperty(prefix = DRUID_STAT_FILTER_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true)
@@ -105,11 +105,39 @@ public class DruidAutoConfiguration {
return new CommonsLogFilter();
}
@Bean(initMethod = "init", destroyMethod = "close")
@ConditionalOnMissingBean(DataSource.class)
public DruidDataSource dataSource() {
log.debug("druid data-source init...");
return new DruidDataSource2();
@Autowired
private DefaultListableBeanFactory beanFactory;
@Autowired
private ConfigurableEnvironment environment;
@Autowired
private DruidDataSourceProperties druidDataSourceProperties;
private static final String PRIMARY_DATA_SOURCE_NAME = "dataSource";
private static final String DATA_SOURCE_NAME_SUFFIX = "DataSource";
@Override
public void afterPropertiesSet() throws Exception {
// if (druidDataSourceProperties.getDataSources().isEmpty() && !beanFactory.containsBean(PRIMARY_DATA_SOURCE_NAME)) {
// BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(DruidDataSource2.class)
// .setInitMethodName("init")
// .setDestroyMethodName("close")
// .getBeanDefinition();
// beanFactory.registerBeanDefinition(PRIMARY_DATA_SOURCE_NAME, beanDefinition);
// log.debug("druid data-source init...");
// } else {
// druidDataSourceProperties.getDataSources().forEach((dataSourceName, dataSourceConfig) -> {
// BeanDefinition eachBeanDefinition = BeanDefinitionBuilder.genericBeanDefinition(DruidDataSource2.class)
// .setInitMethodName("init")
// .setDestroyMethodName("close")
// .getBeanDefinition();
// String beanName = dataSourceName + DATA_SOURCE_NAME_SUFFIX;
// beanFactory.registerBeanDefinition(beanName, eachBeanDefinition);
// DruidDataSource2 eachDataSource = beanFactory.getBean(beanName, DruidDataSource2.class);
// PropertySourcesBinder propertySourcesBinder = new PropertySourcesBinder(environment);
// propertySourcesBinder.bindTo("spring.datasource.druid.data-sources." + dataSourceName, eachDataSource);
// log.debug("druid {}-data-source init...", dataSourceName);
// });
// }
}
}
@@ -75,7 +75,7 @@ public abstract class DruidDataSource2Support extends DruidDataSource {
List<Filter> proxyFilters = super.getProxyFilters();
Optional.ofNullable(druidFilters)
.filter(filters -> !filters.isEmpty())
.ifPresent(dfs -> dfs.stream()
.ifPresent(filters -> filters.stream()
.filter(Objects::nonNull)
.filter(filter -> !proxyFilters.contains(filter))
.forEach(proxyFilters::add)
@@ -1,10 +1,14 @@
package com.github.trang.druid.autoconfigure.properties;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import java.util.HashMap;
import java.util.Map;
import static com.github.trang.druid.autoconfigure.properties.DruidDataSourceProperties.DRUID_DATA_SOURCE_PREFIX;
/**
@@ -40,6 +44,8 @@ public class DruidDataSourceProperties {
DruidWebStatProperties webStat = new DruidWebStatProperties();
@NestedConfigurationProperty
DruidAopStatProperties aopStat = new DruidAopStatProperties();
@NestedConfigurationProperty
Map<String, DruidDataSource> dataSources = new HashMap<>(16);
@Getter@Setter
public static class DruidConfigFilterProperties {
+3 -3
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
</parent>
<artifactId>druid-spring-boot-samples</artifactId>
@@ -35,10 +35,10 @@
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<!--<dependency>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot-actuator-starter</artifactId>
</dependency>
</dependency>-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
@@ -30,8 +30,8 @@ public class SpringDataSourceConfig {
* 前缀的配置,若名称相同则会被 `spring.datasource.druid.one` 覆盖
*/
@Bean(initMethod = "init", destroyMethod = "close")
@ConfigurationProperties("spring.datasource.druid.one")
public DruidDataSource firstDataSource() {
@ConfigurationProperties("spring.datasource.druid.data-sources.one")
public DruidDataSource oneDataSource() {
log.debug("druid first-data-source init...");
return new DruidDataSource2();
}
@@ -40,19 +40,19 @@ public class SpringDataSourceConfig {
* 第二个数据源,若还有其它数据源可以继续增加
*/
@Bean(initMethod = "init", destroyMethod = "close")
@ConfigurationProperties("spring.datasource.druid.two")
public DruidDataSource secondDataSource() {
@ConfigurationProperties("spring.datasource.druid.data-sources.two")
public DruidDataSource twoDataSource() {
log.debug("druid second-data-source init...");
return new DruidDataSource2();
}
@Bean
@Primary
public DynamicDataSource dataSource(DruidDataSource firstDataSource, DruidDataSource secondDataSource) {
public DynamicDataSource dataSource(DruidDataSource oneDataSource, DruidDataSource twoDataSource) {
Map<String, DataSource> targetDataSources = new HashMap<>(8);
targetDataSources.put(firstDataSource.getName(), firstDataSource);
targetDataSources.put(secondDataSource.getName(), secondDataSource);
return new DynamicDataSource(firstDataSource, targetDataSources);
targetDataSources.put(oneDataSource.getName(), oneDataSource);
targetDataSources.put(twoDataSource.getName(), twoDataSource);
return new DynamicDataSource(oneDataSource, targetDataSources);
}
}
@@ -0,0 +1,18 @@
debug: false
spring:
autoconfigure:
exclude:
# 多数据源场景会导致 `javax.sql.DataSource` 和 `org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer`
# 循环依赖,所以需要手动排除 `org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration`
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
datasource:
druid:
# 继承 spring.datasource.druid 前缀的配置,同时可以自定义配置,若名称相同则覆盖父配置
data-sources:
one:
max-active: 50
max-open-prepared-statements: 50
two:
max-active: 25
max-open-prepared-statements: 25
@@ -11,7 +11,7 @@ logging:
spring:
profiles:
# 默认环境为 default,多数据源演示请改为 dynamic
active: default
active: dynamic
output:
ansi:
enabled: detect
@@ -113,14 +113,13 @@ spring:
datasource:
druid:
# 继承 spring.datasource.druid 前缀的配置,同时可以自定义配置,若名称相同则覆盖父配置
one:
name: one
max-active: 50
max-open-prepared-statements: 50
two:
name: two
max-active: 25
max-open-prepared-statements: 25
data-sources:
one:
max-active: 50
max-open-prepared-statements: 50
two:
max-active: 25
max-open-prepared-statements: 25
---
+1 -1
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
</parent>
<artifactId>druid-spring-boot-starter</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot</artifactId>
<version>1.1.1</version>
<version>1.1.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Druid Spring Boot Starter</name>