前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot MyBatis配置多数据源

Spring Boot MyBatis配置多数据源

作者头像
十毛
发布2019-04-29 17:54:29
7000
发布2019-04-29 17:54:29
举报
文章被收录于专栏:用户1337634的专栏

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

整体架构


项目架构

添加依赖


代码语言:javascript
复制
<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
代码语言:javascript
复制
@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
代码语言:javascript
复制
@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
代码语言:javascript
复制
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

使用


代码语言:javascript
复制
@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
代码语言:javascript
复制
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 整体架构
  • 添加依赖
  • First数据源配置
  • Second数据源配置
  • 配置信息
  • 使用
  • 注意事项
  • 参考
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档