63 lines
2.2 KiB
Java
63 lines
2.2 KiB
Java
/**
|
|
* Copyright (c) 2018 人人开源 All rights reserved.
|
|
*
|
|
* https://www.renren.io
|
|
*
|
|
* 版权所有,侵权必究!
|
|
*/
|
|
|
|
package com.peanut.datasource.config;
|
|
|
|
import com.alibaba.druid.pool.DruidDataSource;
|
|
import com.peanut.datasource.properties.DataSourceProperties;
|
|
import com.peanut.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 Mark sunlightcs@gmail.com
|
|
*/
|
|
@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();
|
|
dynamicDataSource.setTargetDataSources(getDynamicDataSource());
|
|
|
|
//默认数据源
|
|
DruidDataSource defaultDataSource = DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties);
|
|
dynamicDataSource.setDefaultTargetDataSource(defaultDataSource);
|
|
|
|
return dynamicDataSource;
|
|
}
|
|
|
|
private Map<Object, Object> getDynamicDataSource(){
|
|
Map<String, DataSourceProperties> dataSourcePropertiesMap = properties.getDatasource();
|
|
Map<Object, Object> targetDataSources = new HashMap<>(dataSourcePropertiesMap.size());
|
|
dataSourcePropertiesMap.forEach((k, v) -> {
|
|
DruidDataSource druidDataSource = DynamicDataSourceFactory.buildDruidDataSource(v);
|
|
targetDataSources.put(k, druidDataSource);
|
|
});
|
|
|
|
return targetDataSources;
|
|
}
|
|
|
|
} |