From 99454deb3fc48f026b8ed2c9ba820e9326fe1f6d Mon Sep 17 00:00:00 2001 From: lsy <18332763730@163.com> Date: Wed, 27 Dec 2017 14:04:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E6=97=B6=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../browser/config/BrowserSecurityConfig.java | 1 + ...on.java => MasterDataSourceCondition.java} | 8 +-- .../common/config/DruidDataSourceConfig.java | 11 +--- .../config/DynamicDataSourceConfig.java | 59 +++++++++++-------- .../config/SqlSessionFactoryConfig.java | 4 +- .../fast/ucenter/UcenterApplication.java | 3 + ms/ucenter/src/main/resources/bootstrap.yml | 49 +++++++++++++++ 7 files changed, 97 insertions(+), 38 deletions(-) rename boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/condition/{SlaveDataSourceCondition.java => MasterDataSourceCondition.java} (70%) diff --git a/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java b/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java index 990b0ef..d965961 100644 --- a/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java +++ b/boot-starter/boot-starter-security/boot-starter-security-browser/src/main/java/com/micro/fast/security/browser/config/BrowserSecurityConfig.java @@ -65,6 +65,7 @@ public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter { * 需要注入数据源 */ @Autowired + @Qualifier("dynamicDataSource") private DataSource dataSource; @Autowired diff --git a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/condition/SlaveDataSourceCondition.java b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/condition/MasterDataSourceCondition.java similarity index 70% rename from boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/condition/SlaveDataSourceCondition.java rename to boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/condition/MasterDataSourceCondition.java index 8433a04..ce44c78 100644 --- a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/condition/SlaveDataSourceCondition.java +++ b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/condition/MasterDataSourceCondition.java @@ -13,13 +13,13 @@ import org.springframework.core.type.AnnotatedTypeMetadata; * @version 1.0 * @since 1.0 */ -public class SlaveDataSourceCondition implements Condition { - private static final Logger logger = LoggerFactory.getLogger(SlaveDataSourceCondition.class); +public class MasterDataSourceCondition implements Condition { + private static final Logger logger = LoggerFactory.getLogger(MasterDataSourceCondition.class); @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { Environment environment = conditionContext.getEnvironment(); //判断环境中是否有从数据库的配置 - logger.info("是否包含从数据库: {}",environment.containsProperty("spring.datasource.druid.slave.username")); - return environment.containsProperty("spring.datasource.druid.slave.username"); + logger.info("是否使用默认主从数据库配置: {}",environment.containsProperty("spring.datasource.druid.master.username")); + return environment.containsProperty("spring.datasource.druid.master.username"); } } diff --git a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DruidDataSourceConfig.java b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DruidDataSourceConfig.java index da794ea..24d0f92 100644 --- a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DruidDataSourceConfig.java +++ b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DruidDataSourceConfig.java @@ -1,7 +1,7 @@ package com.micro.fast.common.config; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; -import com.micro.fast.common.condition.SlaveDataSourceCondition; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; @@ -14,19 +14,14 @@ import javax.sql.DataSource; * @author lsy */ @Configuration +@AutoConfigureBefore(com.micro.fast.common.config.DynamicDataSourceConfig.class) public class DruidDataSourceConfig { @Primary @Bean(name = DynamicDataSourceConfig.MASTER_DATA_SOURCE) @ConfigurationProperties("spring.datasource.druid.master") + @Conditional(com.micro.fast.common.condition.MasterDataSourceCondition.class) public DataSource masterDataSource(){ return DruidDataSourceBuilder.create().build(); } - - @Bean(name = DynamicDataSourceConfig.SLAVE_DATA_SOURCE) - @ConfigurationProperties("spring.datasource.druid.slave") - @Conditional(SlaveDataSourceCondition.class) - public DataSource slaveDataSource(){ - return DruidDataSourceBuilder.create().build(); - } } diff --git a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DynamicDataSourceConfig.java b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DynamicDataSourceConfig.java index dfaf130..e6f0ac0 100644 --- a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DynamicDataSourceConfig.java +++ b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/DynamicDataSourceConfig.java @@ -1,6 +1,6 @@ package com.micro.fast.common.config; -import com.micro.fast.common.dao.DataSourceContextHolder; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.micro.fast.common.dao.DynamicDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -9,6 +9,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import javax.annotation.Resource; import javax.sql.DataSource; import java.util.HashMap; import java.util.Map; @@ -21,26 +22,25 @@ import java.util.Map; * @since 1.0 */ @Configuration -@AutoConfigureBefore({SqlSessionFactoryConfig.class}) +@AutoConfigureBefore({SqlSessionFactoryConfig.class, DruidDataSourceAutoConfigure.class}) public class DynamicDataSourceConfig { public static final String SLAVE = "slave"; public static final String MASTER = "master"; - public static final String SLAVE_DATA_SOURCE = "slaveDataSource"; public static final String MASTER_DATA_SOURCE = "masterDataSource"; + public static final String DATA_SOURCE = "dataSource"; /** - * 当ataSource存在时 + * 当dataSource存在时 */ - @Autowired - @Qualifier(MASTER_DATA_SOURCE) - private DataSource masterDataSource; + @Resource(name = DATA_SOURCE) + private DataSource dataSource; /** * 从数据源 */ @Autowired(required = false) - @Qualifier(SLAVE_DATA_SOURCE) - private DataSource slaveDataSource; + @Qualifier(MASTER_DATA_SOURCE) + private DataSource masterDataSource; /** * 收集所有的datasource @@ -48,27 +48,38 @@ public class DynamicDataSourceConfig { @Autowired private Map dataSourceMap; - @Bean(name = "dynamicDataSource") + @Bean(name = "dataSource") + @Primary public DataSource dynamicDataSource(){ //动态数据源对象 DynamicDataSource dynamicDataSource = new DynamicDataSource(); - //设置默认数据源 - dynamicDataSource.setDefaultTargetDataSource(masterDataSource); //配置多数据源 Map dataSourceMap = new HashMap<>(); - //根据数据源存在情况调整动态数据源配置 - dataSourceMap.put(MASTER,masterDataSource); - if (slaveDataSource!=null){ - dataSourceMap.put(SLAVE,slaveDataSource); + if (masterDataSource==null){ + //设置默认数据源 + dynamicDataSource.setDefaultTargetDataSource(dataSource); + dataSourceMap.put(MASTER,dataSource); + this.dataSourceMap.forEach((key,value) -> { + if ( !DATA_SOURCE.equals(key) + && !MASTER.equals(key)){ + dataSourceMap.put(key,value); + } + }); + }else{ + //设置默认数据源 + dynamicDataSource.setDefaultTargetDataSource(masterDataSource); + //根据数据源存在情况调整动态数据源配置 + dataSourceMap.put(MASTER,masterDataSource); + dataSourceMap.put(SLAVE,dataSource); + this.dataSourceMap.forEach((key,value) -> { + if (!DATA_SOURCE.equals(key) + &&!MASTER_DATA_SOURCE.equals(key) + && !MASTER.equals(key) + && !SLAVE.equals(key)){ + dataSourceMap.put(key,value); + } + }); } - this.dataSourceMap.forEach((key,value) -> { - if (!SLAVE_DATA_SOURCE.equals(key) - && !MASTER_DATA_SOURCE.equals(key) - && !MASTER.equals(key) - && !SLAVE.equals(key)){ - dataSourceMap.put(key,value); - } - }); dynamicDataSource.setTargetDataSources(dataSourceMap); return dynamicDataSource; } diff --git a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/SqlSessionFactoryConfig.java b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/SqlSessionFactoryConfig.java index 861aebc..ea19f09 100644 --- a/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/SqlSessionFactoryConfig.java +++ b/boot-starter/boot-starter-ssm/src/main/java/com/micro/fast/common/config/SqlSessionFactoryConfig.java @@ -20,6 +20,7 @@ import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; +import javax.annotation.Resource; import javax.sql.DataSource; import java.io.IOException; import java.util.ArrayList; @@ -39,8 +40,7 @@ public class SqlSessionFactoryConfig implements TransactionManagementConfigurer{ /** * 数据源对象 */ - @Autowired - @Qualifier("dynamicDataSource") + @Resource(name = "dynamicDataSource") private DataSource dynamicDataSource; /** diff --git a/ms/ucenter/src/main/java/com/micro/fast/ucenter/UcenterApplication.java b/ms/ucenter/src/main/java/com/micro/fast/ucenter/UcenterApplication.java index 7a85b24..6ac900c 100644 --- a/ms/ucenter/src/main/java/com/micro/fast/ucenter/UcenterApplication.java +++ b/ms/ucenter/src/main/java/com/micro/fast/ucenter/UcenterApplication.java @@ -1,13 +1,16 @@ package com.micro.fast.ucenter; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.netflix.feign.EnableFeignClients; @SpringCloudApplication @EnableFeignClients @MapperScan(basePackages = {"com.micro.fast.ucenter.dao"}) +@EnableAutoConfiguration(exclude = DruidDataSourceAutoConfigure.class) public class UcenterApplication { public static void main(String[] args) { diff --git a/ms/ucenter/src/main/resources/bootstrap.yml b/ms/ucenter/src/main/resources/bootstrap.yml index a295237..f2da0a3 100644 --- a/ms/ucenter/src/main/resources/bootstrap.yml +++ b/ms/ucenter/src/main/resources/bootstrap.yml @@ -10,6 +10,55 @@ spring: enabled: true username: config password: server + datasource: + username: root + password: studyj2e + url: jdbc:mysql://127.0.0.1:3317/micro?useUncoide=true&chracterEncoding=utf-8&useSSL=false + druid: + master: + initial-size: 19 + username: root + password: studyj2e + url: jdbc:mysql://127.0.0.1:3317/micro?useUncoide=true&chracterEncoding=utf-8&useSSL=false +# 数据源共用基本配置 + driver-class-name: com.mysql.jdbc.Driver + initial-size: 20 + max-active: 50 + min-idle: 10 + max-wait: 1000 + pool-prepared-statements: true + test-on-borrow: true + test-while-idle: true + time-between-log-stats-millis: 10000 + min-evictable-idle-time-millis: 100000 + max-evictable-idle-time-millis: 200000 + default-auto-commit: true + filters: stat,wall +# url监控配置 + web-stat-filter: + enabled: true + url-pattern: /* + exclusions: /static/*,/druid/* + session-stat-enable: false + stat-view-servlet: + login-username: micro + login-password: fast + reset-enable: true + allow: 127.0.0.1,172.17.0.1 + deny: 127.0.0.2 + enabled: true + url-pattern: /druid/* +# aop拦截监控 + aop-patterns: com.micro.* +# statFilter配置 + filter: + stat: + connection-stack-trace-enable: true + db-type: mysql + enabled: true + log-slow-sql: true + merge-sql: true + slow-sql-millis: 2000 eureka: client: serviceUrl: