springcloud下mybatise配置多数据源连接

第一步:在bootstrap.yml中配置数据库类型,如:DATABASE_TYPE: mysql 。 (比变量只能配置在本地,通过解析文件获取此配置。 经过测试此配置不支持从springcloud config配置中心获取,因为接口DatabaseIdProvider的实现类是通过new的方式进行创建,而不是采用spring实例化的方式)

 

第二步. 在mybatise-config.xml中,添加配置项,如下:

<environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
            </dataSource>
        </environment>
    </environments>
     
    <databaseIdProvider type="com.xxx.xx.db.DataBaseIdProvider">
        <property name="mysql" value="mysql"/> <!--  标注红色部分,为mapper.xml文件 标签 databaseId的值 -->
        <property name="oracle" value="oracle"/>
        <property name="dm" value="dm"/>
    </databaseIdProvider>

第三步:定义DataBaseIdProvider实现类

public class DataBaseIdProvider implements DatabaseIdProvider {
    
    private Properties properties = null;
    
    private Logger log = LoggerFactory.getLogger(DataBaseIdProvider.class);
    
    @Override
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    

    @Override
    public String getDatabaseId(DataSource dataSource) throws SQLException {
        
        String databaseType = "mysql";
        try {
            Yaml yaml = new Yaml();
            URL url = this.getClass().getClassLoader().getResource("
bootstrap.yml");
            if (url != null) {
                @SuppressWarnings("unchecked")
                Map<String, String> map = (Map<String, String>) yaml.load(new FileInputStream(url.getFile()));
                if (null != map.get("DATABASE_TYPE")){
                    log.info("config database type is :" + map.get("
DATABASE_TYPE"));
                    databaseType = map.get("DATABASE_TYPE");    
                }else{
                    log.info("default database type is :" + databaseType);
                }
            }
            
        } catch (Exception e) {
            log.info("read bootstrap.yml failed:" + e.getMessage());
        }
        return properties.getProperty(databaseType);
    }
    
}

 

第四步:在mapper.xml文件中,配置databaseId

 <select id="isKpiNameExist" parameterType="java.lang.String" resultType="java.lang.Integer" databaseId="mysql">

 <select id="isKpiNameExist" parameterType="java.lang.String" resultType="java.lang.Integer" databaseId="oracle">

 <select id="isKpiNameExist" parameterType="java.lang.String" resultType="java.lang.Integer" databaseId="dm">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值