SpringBoot配置多数据源(Mybatis多数据源)

1:主要代码片段 

   1.1:主数据源配置类

@Configuration
@MapperScan(basePackages = "com.zero.bs.dao.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryConfig {

    @Bean(name = "primaryDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource getDateSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "primarySqlSessionFactory")
    @Primary
    public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        //指定mapper映射文件的路径
        bean.setMapperLocations(
                new 
PathMatchingResourcePatternResolver().getResources("classpath*:mapperXml/primary/*.xml"));
        return bean.getObject();
    }


}

   1.2:从数据源配置类

@Configuration
@MapperScan(basePackages = "com.zero.bs.dao.secondary", sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryConfig {

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource getDateSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondarySqlSessionFactory")
    public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapperXml/secondary/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "secondaryTransactionManager")
    public DataSourceTransactionManager orderTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

1.3 dao层创建

2:代码详解

    1:@Configuration--作用于类上,表示该类是一个配置类。是spring中XML配置文件的另一种表现形式,两者可以平替。

    2:@MapperScan--指定要变成实现类的接口所在的包,包下面的所有接口在编译之后都会生成相应的实现类。(让dao层的接口生成实体类对象,并关联sqsessionfactory工厂)---->解释一下这个factory,它是一个镜像实例,每一个数据库一般来说对应唯一一个。作用是用来创建sqlsession,sqlsession类似于JDBC中的Connection.它是应用程序与持久层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象.SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句.每个线程都应该有它自己的SqlSession实例.

    3:@Primary--表明该数据源是主数据源(面对同样类型的bean,自动注入的时候防止出现错误)

   4:@ConfigurationProperties--会将对应前缀的后面的属性与Bean对象的属性匹配。符合条件则进行赋值。

   5:@Qualifier--解决注入依赖冲突的问题,其实就是可以根据名称来选择bean来进行注入,可以对比@Primary注解来进行对比记忆。

3:总结

        其实主要就是在通过配置类的形式指明了有两个或多个数据源,并指明两个或多个数据源所对应的dao层。然后dao层中的接口再生成了实体类并关联了sql语句之后,该语句再被加载的时候就会自动去匹配自己所对应的数据源。从而达到不同的sql语句面向的数据源也不一样的目的(多数据源类似,不过是重新添加配置类即可。)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值