SpringBoot整合mybatis配置多数据源

之前自己练习的时候由于只用了一个数据库,所以没怎么用到多数据源配置。
然后这周实习用到了,记录一下。

pom.xml

这没有什么特别的,就是平常的连接mysql以及springboot的配置。
这里就简单列举一下,可以参考网上其他的如何创建项目的教程。

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

application.properties

如果嫌冗余的话,可以创建一个application-datasource.properties中,
在application.properties中引用(spring.profiles.active = datasource)这个文件就可以。
这里就放在application.properties中了。

# AAA
spring.datasource.AAA.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.AAA.url = jdbc:mysql://xxx:3306/xxx?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8
spring.datasource.AAA.username = root
spring.datasource.AAA.password = 9fhj32z12feriz3n2

#  BBB
spring.datasource.BBB.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.BBB.url = jdbc:mysql://xxx:3306/xxx?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8
spring.datasource.BBB.username = root
spring.datasource.BBB.password = asdasd


# CCC
spring.datasource.CCC.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.CCC.url = jdbc:mysql://xxx:3306/xxx?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8
spring.datasource.CCC.username = root
spring.datasource.CCC.password = root

Config

多个数据源需要选一个加上 @Primary 配置。
基本上都一样,就是改一下bean的名字就可以
@MapperScan(basePackages = “com.example.demo.aaa.mapper” 扫描mapper接口的包路径
@ConfigurationProperties(prefix = “xx”) 指定配置文件的数据源前缀

bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources
(“classpath:mapper/*.xml”));
指定mapper接口对应 mapper.xml的路径

AAAConfig

@Configuration
@MapperScan(basePackages = "com.example.demo.aaa.mapper", sqlSessionTemplateRef  = "sqlSessionTemplate")
public class AAAConfig {

    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource.AAA")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
//        bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml"));
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "transactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

BBBConfig

@Configuration
@MapperScan(basePackages = "com.example.demo.bbb.mapper", sqlSessionTemplateRef = "sqlSessionTemplateBBB")
public class BBBConfig {
    @Bean(name = "dataSourceBBB")
    @ConfigurationProperties(prefix = "spring.datasource.BBB")
    public DataSource VvmusicMetadataReadDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactoryBBB")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSourceBBB") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
//        bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml"));
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/BBB/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "transactionManagerBBB")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSourceBBB") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplateBBB")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactoryBBB") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

CCCConfig

@Configuration
@MapperScan(basePackages = "com.example.demo.ccc.mapper", sqlSessionTemplateRef  = "sqlSessionTemplateCCC")
public class CCCConfig {

    @Bean(name = "dataSourceCCC")
    @ConfigurationProperties(prefix = "spring.datasource.CCC")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactoryCCC")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSourceCCC") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
//        bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml"));
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "transactionManagerCCC")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSourceCCC") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplateCCC")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactoryCCC") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

结构

在这里插入图片描述

在这里插入图片描述

应该就是这么多,接口测试就不写了 随便写个controller测一下就可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值