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 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 connProperties = propertyResolver.getSubProperties("."); System.err.println("connProperties>>> " + connProperties); List customs = (List) 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 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"); } }