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");
}
}