package com.qiaoba.common.database.context;

import com.qiaoba.common.base.constant.TenantConstant;
import com.qiaoba.common.base.context.BaseContext;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import java.util.Map;

/**
 * 动态数据源上下文对象
 *
 * @author ailanyin
 * @version 1.0
 * @since 2021/10/15 0015 下午 16:43
 */
public class DynamicDataSourceContext extends AbstractRoutingDataSource {


    /**
     * 设置默认数据源、全部数据源，及刷新
     */
    public void freshDataSource(Map<Object, Object> targetDataSources) {
        //默认数据源 (determineCurrentLookupKey 如果找不到就使用默认数据源)
        super.setDefaultTargetDataSource(targetDataSources.get(TenantConstant.DEFAULT_TENANT_ID));
        //设置全部数据源
        super.setTargetDataSources(targetDataSources);
        //刷新(即把targetDataSources刷到resolvedDataSources中去，resolvedDataSources才是我们真正存放数据源的map)
        super.afterPropertiesSet();
    }

    @Override
    protected Object determineCurrentLookupKey() {
        //获取当前指定的数据源
        return BaseContext.getDataSource();
    }


    @Override
    public void afterPropertiesSet() {
    }

}
