diff --git a/druid-spring-boot-actuator/druid-spring-boot-actuator-autoconfigure/pom.xml b/druid-spring-boot-actuator/druid-spring-boot-actuator-autoconfigure/pom.xml index 556efec..a0647a4 100644 --- a/druid-spring-boot-actuator/druid-spring-boot-actuator-autoconfigure/pom.xml +++ b/druid-spring-boot-actuator/druid-spring-boot-actuator-autoconfigure/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot-actuator - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot-actuator-autoconfigure diff --git a/druid-spring-boot-actuator/druid-spring-boot-actuator-starter/pom.xml b/druid-spring-boot-actuator/druid-spring-boot-actuator-starter/pom.xml index 0c9da63..0f434de 100644 --- a/druid-spring-boot-actuator/druid-spring-boot-actuator-starter/pom.xml +++ b/druid-spring-boot-actuator/druid-spring-boot-actuator-starter/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot-actuator - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot-actuator-starter diff --git a/druid-spring-boot-actuator/pom.xml b/druid-spring-boot-actuator/pom.xml index c7b7ebe..cd2c5c6 100644 --- a/druid-spring-boot-actuator/pom.xml +++ b/druid-spring-boot-actuator/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot-parent - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot-actuator diff --git a/druid-spring-boot-example/druid-spring-boot-mybatis-example/pom.xml b/druid-spring-boot-example/druid-spring-boot-mybatis-example/pom.xml index 3dd44c9..6cf923a 100644 --- a/druid-spring-boot-example/druid-spring-boot-mybatis-example/pom.xml +++ b/druid-spring-boot-example/druid-spring-boot-mybatis-example/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot-example - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot-mybatis-example diff --git a/druid-spring-boot-example/druid-spring-boot-mybatis-example/src/main/java/com/github/trang/druid/example/DruidSpringBootStarterApplication.java b/druid-spring-boot-example/druid-spring-boot-mybatis-example/src/main/java/com/github/trang/druid/example/DruidSpringBootStarterApplication.java index cd5f3d6..c927d81 100644 --- a/druid-spring-boot-example/druid-spring-boot-mybatis-example/src/main/java/com/github/trang/druid/example/DruidSpringBootStarterApplication.java +++ b/druid-spring-boot-example/druid-spring-boot-mybatis-example/src/main/java/com/github/trang/druid/example/DruidSpringBootStarterApplication.java @@ -14,7 +14,7 @@ import org.springframework.context.ApplicationContext; * * @author trang */ -@SpringBootApplication(scanBasePackages = "com.github.trang.druid.example") +@SpringBootApplication @MapperScan("com.github.trang.druid.example.mapper") public class DruidSpringBootStarterApplication implements CommandLineRunner { diff --git a/druid-spring-boot-example/pom.xml b/druid-spring-boot-example/pom.xml index d3c0f3a..e8456fb 100644 --- a/druid-spring-boot-example/pom.xml +++ b/druid-spring-boot-example/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot-parent - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot-example diff --git a/druid-spring-boot/druid-spring-boot-autoconfigure/pom.xml b/druid-spring-boot/druid-spring-boot-autoconfigure/pom.xml index ce4fd39..4e6cd5e 100644 --- a/druid-spring-boot/druid-spring-boot-autoconfigure/pom.xml +++ b/druid-spring-boot/druid-spring-boot-autoconfigure/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot-autoconfigure diff --git a/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/DruidAutoConfiguration.java b/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/DruidAutoConfiguration.java index 3d3105f..9ad3d08 100644 --- a/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/DruidAutoConfiguration.java +++ b/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/DruidAutoConfiguration.java @@ -12,27 +12,20 @@ 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.BeansException; -import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.condition.*; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; -import org.springframework.boot.bind.PropertySourcesBinder; -import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.EnvironmentAware; -import org.springframework.context.annotation.*; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.Environment; -import org.springframework.core.type.AnnotatedTypeMetadata; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Import; -import javax.sql.DataSource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -49,12 +42,9 @@ import static com.github.trang.druid.autoconfigure.properties.DruidDataSourcePro @ConditionalOnClass(DruidDataSource.class) @AutoConfigureBefore(DataSourceAutoConfiguration.class) @EnableConfigurationProperties({DataSourceProperties.class, DruidDataSourceProperties.class}) -@Import({DruidServletConfiguration.class, DruidStatConfiguration.class}) +@Import({DruidDataSourceConfiguration.class, DruidServletConfiguration.class, DruidStatConfiguration.class}) @Slf4j -public class DruidAutoConfiguration implements BeanFactoryAware, EnvironmentAware { - - private DefaultListableBeanFactory beanFactory; - private ConfigurableEnvironment environment; +public class DruidAutoConfiguration { @Bean @ConditionalOnProperty(prefix = DRUID_STAT_FILTER_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) @@ -120,52 +110,9 @@ public class DruidAutoConfiguration implements BeanFactoryAware, EnvironmentAwar return new CommonsLogFilter(); } - /** - * 自动注入单数据源 - * - * @condition 1. BeanFactory 中不存在 DruidDataSource 类型的 bean - * @condition 2. BeanFactory 中不存在 'dataSource' 名称的 bean - * @condition 3. 配置文件中不存在以 'spring.datasource.druid.data-source' 开头的属性 - * @return DruidDataSource dataSource - */ - @Bean(initMethod = "init", destroyMethod = "close") - @ConditionalOnMissingBean(value = DataSource.class, name = "dataSource") - @Conditional(DataSourceCondition.class) - public DruidDataSource dataSource() { - log.debug("druid data-source init..."); - return new DruidDataSource2(); - } - - /** - * 自动注入多数据源 - * - * @condition 1. BeanFactory 中不存在 DruidDataSource 类型的 bean - * @condition 2. 配置文件中存在以 'spring.datasource.druid.data-source' 开头的属性 - * @return Map dataSourceMap/druidDataSourceMap - */ @Bean - @Conditional(DataSourcesCondition.class) - public Map dataSourceMap(DruidDataSourceProperties druidDataSourceProperties) { - druidDataSourceProperties.getDataSources().forEach((dataSourceName, dataSourceConfig) -> { - // 构造 BeanDefinition,通过 DruidDataSource2 实现继承 'spring.datasource.druid' 的配置 - BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(DruidDataSource2.class) - .setInitMethodName("init") - .setDestroyMethodName("close") - .getBeanDefinition(); - // 注册 BeanDefinition - beanFactory.registerBeanDefinition(dataSourceName, beanDefinition); - String lowerCaseName = dataSourceName.toLowerCase(); - // 当 beanName 不是以 datasource 结尾时,增加别名 - if (!lowerCaseName.endsWith("datasource") && !lowerCaseName.endsWith("data-source")) { - // 注册 Alias - beanFactory.registerAlias(dataSourceName, dataSourceName + "DataSource"); - } - // 将 'spring.datasource.druid.data-sources.$dataSourceName' 的配置绑定到 Bean - DruidDataSource2 dataSource = beanFactory.getBean(dataSourceName, DruidDataSource2.class); - PropertySourcesBinder propertySourcesBinder = new PropertySourcesBinder(environment); - propertySourcesBinder.bindTo("spring.datasource.druid.data-sources." + dataSourceName, dataSource); - log.debug("druid {}-data-source init...", dataSourceName); - }); + @ConditionalOnBean(DruidDataSource.class) + public Map dataSourceMap(ConfigurableListableBeanFactory beanFactory) { return new HashMap<>(beanFactory.getBeansOfType(DruidDataSource2.class)); } @@ -183,42 +130,4 @@ public class DruidAutoConfiguration implements BeanFactoryAware, EnvironmentAwar return new ArrayList<>(dataSourceMap.values()); } - static class DataSourceCondition extends SpringBootCondition { - - @Override - public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { - RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(context.getEnvironment(), "spring.datasource.druid."); - Map properties = resolver.getSubProperties("data-sources"); - if (!properties.isEmpty()) { - return ConditionOutcome.noMatch("find 'data-sources' properties"); - } - return ConditionOutcome.match(); - } - - } - - static class DataSourcesCondition extends SpringBootCondition { - - @Override - public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { - RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(context.getEnvironment(), "spring.datasource.druid."); - Map properties = resolver.getSubProperties("data-sources"); - if (properties.isEmpty()) { - return ConditionOutcome.noMatch("can't find 'data-sources' properties"); - } - return ConditionOutcome.match(); - } - - } - - @Override - public void setBeanFactory(BeanFactory beanFactory) throws BeansException { - this.beanFactory = (DefaultListableBeanFactory)beanFactory; - } - - @Override - public void setEnvironment(Environment environment) { - this.environment = (ConfigurableEnvironment)environment; - } - } \ No newline at end of file diff --git a/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/properties/DruidDataSourceProperties.java b/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/properties/DruidDataSourceProperties.java index fabd2ae..c9bd4c7 100644 --- a/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/properties/DruidDataSourceProperties.java +++ b/druid-spring-boot/druid-spring-boot-autoconfigure/src/main/java/com/github/trang/druid/autoconfigure/properties/DruidDataSourceProperties.java @@ -4,7 +4,6 @@ import com.github.trang.druid.autoconfigure.datasource.DruidDataSource2; 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; @@ -33,17 +32,14 @@ public class DruidDataSourceProperties { public static final String DRUID_WEB_STAT_PREFIX = "spring.datasource.druid.web-stat"; public static final String DRUID_AOP_STAT_PREFIX = "spring.datasource.druid.aop-stat"; - @NestedConfigurationProperty DruidConfigFilterProperties config = new DruidConfigFilterProperties(); - @NestedConfigurationProperty DruidStatViewServletProperties statViewServlet = new DruidStatViewServletProperties(); - @NestedConfigurationProperty DruidWebStatProperties webStat = new DruidWebStatProperties(); - @NestedConfigurationProperty DruidAopStatProperties aopStat = new DruidAopStatProperties(); Map dataSources = new HashMap<>(16); - @Getter@Setter + @Getter + @Setter public static class DruidConfigFilterProperties { /** 是否开启 druid config-filter,默认否 */ private boolean enabled; diff --git a/druid-spring-boot/druid-spring-boot-starter/pom.xml b/druid-spring-boot/druid-spring-boot-starter/pom.xml index 2c30f10..a8c7cd7 100644 --- a/druid-spring-boot/druid-spring-boot-starter/pom.xml +++ b/druid-spring-boot/druid-spring-boot-starter/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot-starter diff --git a/druid-spring-boot/pom.xml b/druid-spring-boot/pom.xml index 405e526..a6bf39d 100644 --- a/druid-spring-boot/pom.xml +++ b/druid-spring-boot/pom.xml @@ -7,7 +7,7 @@ com.github.drtrang druid-spring-boot-parent - 1.1.2 + 1.1.3-SNAPSHOT druid-spring-boot diff --git a/pom.xml b/pom.xml index 28eb06f..ed8f203 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.github.drtrang druid-spring-boot-parent - 1.1.2 + 1.1.3-SNAPSHOT pom Druid Spring Boot Starter