All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gitee.huanminabc.utils_tools.dynamic_datasource.bean.YmlDataSourceProvider Maven / Gradle / Ivy

There is a newer version: 1.0.6-RELEASE
Show newest version
package com.gitee.huanminabc.utils_tools.dynamic_datasource.bean;

import com.gitee.huanminabc.utils_tools.dynamic_datasource.base.DynamicDataSourceService;
import com.gitee.huanminabc.utils_tools.dynamic_datasource.entity.DataSourceEneity;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.codehaus.janino.IClass;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 文件读取yml里的数据源配置
 */
@Component
@Data
@DependsOn("springContextHolder") //当前bean初始化之前,优先加载指定的bean
@ConfigurationProperties(prefix = "spring.datasource")
@Slf4j
public class YmlDataSourceProvider {

    private List> multiDb;

    private DataSource buildDataSource(DataSourceProperties prop) {
        DataSourceBuilder builder = DataSourceBuilder.create();
        builder.driverClassName(prop.getDriverClassName());
        builder.username(prop.getUsername());
        builder.password(prop.getPassword());
        builder.url(prop.getUrl());
        return builder.build();
    }

    public void initDataSource() {
        log.info("-----------------YmlDataSourceProvider------------------");
        multiDb.forEach(map -> {
            Set keys = map.keySet();
            keys.forEach(key -> {
                if (DynamicDataSourceService.containsDataSource(key)) {
                    log.error("[YmlDataSourceProvider->initDataSource] 注册的数据源已存在 key:{}", key);
                    System.exit(1);
                }
                DataSourceProperties properties = map.get(key);
                DataSource dataSource = buildDataSource(properties);
                DynamicDataSourceService.addDataSource(key, dataSource, properties);
            });
        });
    }

    //在构造函数之后执行
    @PostConstruct
    public void init() {
        initDataSource();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy