动态数据源_tuniu_mcs

<bean id="dataSourceMybatis" class="com.tuniu.mcs.product.db.DynamicDataSource">
    <property name="targetDataSources">
        <map key-type="java.lang.String">
            <entry key="master" value-ref="MCS_PMS-PRD_NM-MASTER-DB" />
            <entry key="slave"  value-ref="MCS_PMS-PRD_NM-SLAVE-DB" />
        </map>
    </property>
    <property name="defaultTargetDataSource" ref="MCS_PMS-PRD_NM-MASTER-DB"></property>
</bean>


import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource
{
    @Override
    protected Object determineCurrentLookupKey()
    {
        return DataSourceSwitch.getDataSouce();
    }
}


import org.springframework.util.Assert;
public class DataSourceSwitch
{
    @SuppressWarnings("rawtypes")
    private static final ThreadLocal CONTEXTHOLDER = new ThreadLocal();
    
    /**
     * @param dataSource
     */
    @SuppressWarnings("unchecked")
    public static void setDataSource(String dataSource)
    {
        Assert.notNull(dataSource, "数据源未创建成功!");
        CONTEXTHOLDER.set(dataSource);
    }
    
    /**
     * set master dataSource
     */
    @SuppressWarnings("unchecked")
    public static void setMaster()
    {
        CONTEXTHOLDER.remove();
        CONTEXTHOLDER.set("master");
    }
    
    /**
     * set slave dataSource
     */
    @SuppressWarnings("unchecked")
    public static void setSlave()
    {
        CONTEXTHOLDER.remove();
        CONTEXTHOLDER.set("slave");
    }
    
    /**
     * @return dataSource
     */
    @SuppressWarnings("unchecked")
    public static String getDataSouce()
    {
        if (null == CONTEXTHOLDER.get())
        {
            CONTEXTHOLDER.set("master");
        }
        return CONTEXTHOLDER.get().toString();
    }
}

在代码中调用DataSourceSwitch.setSlave();

猜你喜欢

转载自blog.csdn.net/m0_37993453/article/details/81981080