package admin.config;

import admin.asept.DynamicDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
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 javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author lj
 * @date 2024/11/19 13:24
 */
@Configuration
@EnableAutoConfiguration
public class DataSourceConfig{

    @Bean(value = "master")
//    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master")
    public DataSource createDataSourceYdp(){
        System.out.println("ydp数据源");
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(value="slaver")
    @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.slaver")
    public DataSource createDataSourceQy(){
        System.out.println("qy数据源");
        return DruidDataSourceBuilder.create().build();
    }

    /**
     * 动态数据源引入
     *
     * @param masterDataSource
     * @return
     */
    @Bean
    @Primary
    public DynamicDataSource dataSource(@Qualifier("master") DataSource ydpDataSource,
                                        @Qualifier("slaver") DataSource qyDataSource) {
        Map<Object, Object> targetDataSources = new HashMap<>(3);
        targetDataSources.put("master", ydpDataSource);
        targetDataSources.put("slaver", qyDataSource);


        //配置包级别的数据源
        Map<String, String> packageDataSource = new HashMap<>();
        //默认包使用的数据源
        packageDataSource.put("admin.modules","master");

        DynamicDataSource dynamicDataSource = new DynamicDataSource(ydpDataSource, targetDataSources);
        dynamicDataSource.setPackageDatasource(packageDataSource);
        dynamicDataSource.afterPropertiesSet();
        return dynamicDataSource;
    }
}