springboot实现多数据源方法二

上一篇博客用aop最终页没实现完美的多数据源。最终只能在所有配置配双份加@Primary注解,用最笨的方法实现了。

1、把原先的datasource部分配置配置两份,不能写在一个配置文件中不然告诉你已经存在了。定义两个配置文件

单个配置文件(主):

package com.boot.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
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 org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/**
 * @Author huangsan
 * @create 2019/8/6 10:36
 */
@Configuration
@MapperScan(basePackages = "com.boot.*.dao.**", sqlSessionFactoryRef = "sqlSessionFactory1")
public class DataSourceConfig {

    @Bean(name = "dataSource1")
    @Primary
    @ConfigurationProperties("spring.datasource.druid.first")
    public DataSource initDataSource() {
        return new DruidDataSource();
    }

    @Bean(name = "sqlSessionFactory1")
    @Primary
    public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource1") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/**/*.xml"));
        bean.setTypeAliasesPackage("com.boot");
        return bean.getObject();
    }

    @Bean("sqlSessionTemplate1")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate1(
            @Qualifier("sqlSessionFactory1") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }

    @Bean
    @Primary
    public PlatformTransactionManager platformTransactionManager(@Qualifier("dataSource1") DataSource dataSource1) {
        return new DataSourceTransactionManager(dataSource1);
    }
}

另一个配置文件中配置和这个一样,将所有name都改变一下。把@Primary去掉(@Primary指定默认值)。

注意:1)另一个配置中PlatformTransactionManager的bean需要给个name,或者两个配置文件中都给也可以。

2)@MapperScan扫描的包结构别交叉。

2、使用更简单,如果是主表的就直接用注解@Transactional。如果是其他的库需要使用@Transactional(transactionManager = "tm2")指定PlatformTransactionManager的name。

以上就是多数据源的配置了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值