DynamicDataSourceRegister.java 2.71 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
package com.lyms.etl.datasource;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotationMetadata;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @Author: litao
* @Date: 2017/5/18 0018 20:08
* @Version: V1.0
*/
public class DynamicDataSourceRegister
implements ImportBeanDefinitionRegistrar, EnvironmentAware {

private static final Logger LOG = LoggerFactory.getLogger(DynamicDataSourceRegister.class);

private DataSource defaultDataSource; /** 主数据源 */
private Map<String, DataSource> customDataSources = new HashMap<>(); /** 其他数据源 */

@Override
public void setEnvironment(Environment environment) {
initDefaultDataSource(environment);
initCustomDataSources(environment);
}

/**
* 初始化多数据源
* @param environment
*/
private void initCustomDataSources(Environment environment) {
try {
RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource");

Map<String, Object> connProperties = propertyResolver.getSubProperties(".");
System.err.println("connProperties>>> " + connProperties);
List<String> customs = (List<String>) connProperties.get("customs");
} catch (Exception e) {
LOG.error("初始化多数据源失败:", e.fillInStackTrace());
}
}

/**
* 初始化主数据源(默认数据源)
* @param environment
*/
@ConfigurationProperties
private void initDefaultDataSource(Environment environment) {
try {
RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource");

Map<String, Object> connProperties = propertyResolver.getSubProperties(".");
defaultDataSource = DruidDataSourceFactory.createDataSource(connProperties);
} catch (Exception e) {
LOG.error("初始化主数据源出错:", e.fillInStackTrace());
}
}

@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
System.err.println("registerBeanDefinitions");
}
}