/** * Copyright (c) 2018 yiidata.com All rights reserved. * * http://yiidata.com * * */ package com.yiidata.intergration.web.datasource.config; import com.alibaba.druid.pool.DruidDataSource; import com.yiidata.intergration.web.datasource.properties.DataSourceProperties; import com.yiidata.intergration.web.datasource.properties.DynamicDataSourceProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.HashMap; import java.util.Map; /** * 配置多数据源 * * @author zhenqin */ @Configuration @EnableConfigurationProperties(DynamicDataSourceProperties.class) public class DynamicDataSourceConfig { @Autowired private DynamicDataSourceProperties properties; @Bean @ConfigurationProperties(prefix = "spring.datasource.druid") public DataSourceProperties dataSourceProperties() { return new DataSourceProperties(); } @Bean public DynamicDataSource dynamicDataSource(DataSourceProperties dataSourceProperties) { DynamicDataSource dynamicDataSource = new DynamicDataSource(); //默认数据源 DruidDataSource defaultDataSource = DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties); dynamicDataSource.setDefaultTargetDataSource(defaultDataSource); // 绑定的第三方数据源 final Map dynamicDataSource1 = getDynamicDataSource(); dynamicDataSource.setTargetDataSources(dynamicDataSource1); dynamicDataSource1.put("default", defaultDataSource); return dynamicDataSource; } private Map getDynamicDataSource(){ Map dataSourcePropertiesMap = properties.getDatasource(); Map targetDataSources = new HashMap<>(dataSourcePropertiesMap.size() + 1); dataSourcePropertiesMap.forEach((name, ds) -> { DruidDataSource druidDataSource = DynamicDataSourceFactory.buildDruidDataSource(ds); targetDataSources.put(name, druidDataSource); }); return targetDataSources; } }