暂时保存

This commit is contained in:
lsy
2017-12-27 14:04:49 +08:00
parent 1404c6048e
commit 99454deb3f
7 changed files with 97 additions and 38 deletions
@@ -65,6 +65,7 @@ public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
* 需要注入数据源
*/
@Autowired
@Qualifier("dynamicDataSource")
private DataSource dataSource;
@Autowired
@@ -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");
}
}
@@ -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();
}
}
@@ -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<String,DataSource> dataSourceMap;
@Bean(name = "dynamicDataSource")
@Bean(name = "dataSource")
@Primary
public DataSource dynamicDataSource(){
//动态数据源对象
DynamicDataSource dynamicDataSource = new DynamicDataSource();
//设置默认数据源
dynamicDataSource.setDefaultTargetDataSource(masterDataSource);
//配置多数据源
Map<Object,Object> 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;
}
@@ -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;
/**
@@ -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) {
@@ -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: