专栏首页用户1337634的专栏Spring Boot MyBatis配置多数据源

Spring Boot MyBatis配置多数据源

项目中有时候需要用到多数据源,但是Spring Boot的自动配置并不支持,所以需要手动做很多工作,其实也不难

整体架构


项目架构

添加依赖


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

First数据源配置


  • FirstDataSourceConfig
@Configuration
@MapperScan(basePackages = "com.tenmao.multiplemybatis.mapper.first",sqlSessionFactoryRef = "firstSqlSessionFactory")
public class FirstDataSourceConfig {
    @Bean(name = "firstDataSource")
    @ConfigurationProperties("datasource.first")
    public DataSource firstDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "firstSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("firstDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
        .getResources("classpath*:mapper/first/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

Second数据源配置


  • SecondDataSourceConfig
@Configuration
@MapperScan(basePackages = "com.tenmao.multiplemybatis.mapper.second",sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {
    @Bean(name = "secondDataSource")
    @ConfigurationProperties("datasource.second")
    public DataSource secondDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("secondDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:mapper/second/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

配置信息


  • application.properties
datasource.first.jdbcUrl=jdbc:mysql://127.0.0.1:3306/blog-first?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
datasource.first.driverClassName=com.mysql.cj.jdbc.Driver
datasource.first.username=tenmao
datasource.first.password=123456


datasource.second.jdbcUrl=jdbc:mysql://127.0.0.1:3306/blog-second?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
datasource.second.driverClassName=com.mysql.cj.jdbc.Driver
datasource.second.username=tenmao
datasource.second.password=123456

使用


@SpringBootApplication
public class MultipleMybatisApplication {
    @Resource
    private PersonMapper personMapper;
    @Resource
    private CarMapper carMapper;

    public static void main(String[] args) {
        SpringApplication.run(MultipleMybatisApplication.class, args);
    }
    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext context) {
        return args -> {
            Person person = personMapper.selectById(1);
            System.out.println(person);
            Car car = carMapper.selectById(1);
            System.out.println(car);
        };
    }
}

注意事项

  • datasource.first.jdbcUrl:注意是jdbcUrl而不是url
  • 按照这种配置,发现其实并不需要添加注解@EnableAutoConfiguration
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis的单元测试 - Redis mock

    ps: 为了把文件写对地方,需要在建立test/resources/application.properties空文件

    十毛
  • Feign Client without Eureka

    十毛
  • Spring Boot & 单元测试

    十毛
  • scala-sparkML学习笔记:scala解析json文件

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    MachineLP
  • phanbedder使用实例

    PhantomJS是个好东东,很多时候爬虫需要用到,但是这个有windows、linux、mac的版本,想要跨平台的话,需要自己再处理一下,幸好有了phanbe...

    codecraft
  • springboot2.x纯注解整合dubbo

    springboot1.x和springboot2.x整合差距挺大的,基于最新的2.x进行整合,使用纯注解的方式

    陈灬大灬海
  • dubbo-springboot入门级demo

    老梁
  • SpringBoot 2.0 + Apache Dubbo 2.7.3 最新版整合方案

    2018年2月16日,Apache Dubbo 加入 Apache 基金会孵化器。2019年5月16日,Apache 软件基金会董事会决议通过了 Apache ...

    小柒2012
  • 分布式服务框架 dubbo/dubbox 入门示例

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架。 官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo....

    菩提树下的杨过
  • Maven+SpringMVC+Dubbo 简单的入门demo配置

    之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程序猿来说,真是一个好消息。最近有时间了,打算做一个demo把dubbo在...

    哎_小羊

扫码关注云+社区

领取腾讯云代金券