package com.vincent.rsf.server.common.config;
|
|
import com.vincent.rsf.server.common.datasource.DataSourceNames;
|
import com.vincent.rsf.server.common.datasource.RoutingDataSource;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.ObjectProvider;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Primary;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import javax.sql.DataSource;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 主数据源配置
|
*/
|
@Configuration
|
public class PrimaryDataSourceConfig {
|
|
@Bean(name = "primaryDataSourceProperties")
|
@ConfigurationProperties(prefix = "spring.datasource")
|
public DataSourceProperties primaryDataSourceProperties() {
|
return new DataSourceProperties();
|
}
|
|
@Bean(name = "primaryDataSource")
|
public DataSource primaryDataSource(@Qualifier("primaryDataSourceProperties") DataSourceProperties properties) {
|
return properties.initializeDataSourceBuilder().build();
|
}
|
|
@Bean(name = "dataSource")
|
@Primary
|
public DataSource dataSource(
|
@Qualifier("primaryDataSource") DataSource primaryDataSource,
|
@Qualifier("cusItemSyncDataSource") ObjectProvider<DataSource> cusItemSyncDataSourceProvider) {
|
RoutingDataSource routingDataSource = new RoutingDataSource();
|
Map<Object, Object> map = new HashMap<>();
|
map.put(DataSourceNames.PRIMARY, primaryDataSource);
|
DataSource cusItemSyncDataSource = cusItemSyncDataSourceProvider.getIfAvailable();
|
if (cusItemSyncDataSource != null) {
|
map.put(DataSourceNames.DJ_CLOUD_WMS, cusItemSyncDataSource);
|
}
|
routingDataSource.setDefaultTargetDataSource(primaryDataSource);
|
routingDataSource.setTargetDataSources(map);
|
routingDataSource.afterPropertiesSet();
|
return routingDataSource;
|
}
|
|
@Bean(name = "jdbcTemplate")
|
@Primary
|
public JdbcTemplate jdbcTemplate(@Qualifier("dataSource") DataSource dataSource) {
|
return new JdbcTemplate(dataSource);
|
}
|
}
|