博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot 2.0 | SpringBoot + MyBatis 配置多数据源
阅读量:4104 次
发布时间:2019-05-25

本文共 3651 字,大约阅读时间需要 12 分钟。

在传统的单体架构中,一个系统对应一个数据库,但在一个分布式系统中,比如微服务,每一个服务对应一个数据库,由于业务的需求,有时需要在一个服务中访问多个数据库的数据,需要配置多数据源,以下是SpringBoot 2.0.5 + MyBatis + .yml 格式配置多数据源的方法。

数据源配置

application.yml 文件的配置

spring:  datasource:    article-service:      driver-class-name: com.mysql.jdbc.Driver      username: root      password: roo      jdbc-url: jdbc:mysql://localhost:3306/articleservice?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true    video-service:      driver-class-name: com.mysql.jdbc.Driver      username: root      password: roo      jdbc-url: jdbc:mysql://localhost:3306/videoservice?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true# 端口设置server:  port: 8083

在单数据源的配置中,数据库地址的写法是

url: jdbc:mysql://localhost:3306

多数据源中,需要在 url 前面加上 jdbc-

jdbc-url: jdbc:mysql://localhost:3306

数据源的配置

创建多个配置类,每一个类对应一个数据源的配置,以下是一个数据源的配置。

@Configuration//配置mbatis接口@MapperScan(basePackages = "com.hly.springbootmybatismultidatasources.dao.ArticleService", sqlSessionFactoryRef = "articleServiceSqlSessionFactory")public class ArticleServiceDataSourceConfig {    //将对象放入容器中    @Bean(name = "articleServiceDataSource")    //表示默认数据源    @Primary    //yml配置的对象    @ConfigurationProperties(prefix = "spring.datasource.article-service")    public DataSource getArticleServiceDataSource() {        return DataSourceBuilder.create().build();    }    @Bean(name = "articleServiceSqlSessionFactory")    @Primary    //@Qualifier 查找Spring 容器中名为articleServiceDataSource的对象    public SqlSessionFactory articleServiceSqlSessionFactory(@Qualifier("articleServiceDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        //配置Mybatis XML文件的位置        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/articleService/*.xml"));        return bean.getObject();    }    @Bean(name = "articleServiceSqlSessionTemplate")    @Primary    public SqlSessionTemplate articleServiceSqlSessionTemplate(@Qualifier("articleServiceSqlSessionFactory") SqlSessionFactory sqlSessionFactory){        return new SqlSessionTemplate(sqlSessionFactory);    }}

Mapper & Dao

每一个数据源对应的 Mapper 和 Dao 以不同的目录区分

在这里插入图片描述
在这里插入图片描述

测试

数据库

DROP TABLE IF EXISTS `video`;CREATE TABLE `video`(  `v_id` int(11) NOT NULL AUTO_INCREMENT,  `v_name` varchar(20) NOT NULL DEFAULT '',  `a_id` int(11) NOT NULL,  PRIMARY KEY (`v_id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 DEFAULT CHARSET=utf8DROP TABLE IF EXISTS `article`;CREATE TABLE `article`(  `a_id` int(11) NOT NULL AUTO_INCREMENT,  `a_name` varchar(20) NOT NULL DEFAULT '',  PRIMARY KEY (`a_id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 DEFAULT CHARSET=utf8

Mapper.xml 文件

Dao 接口

@Repositorypublic interface ArticleDao {    List
getArticles();}
@Repositorypublic interface VideoDao {    List

Controller

@RestControllerpublic class TestController {    @Autowired    ArticleDao articleDao;    @Autowired    VideoDao videoDao;    @RequestMapping(value = "/articles")    public Object getArticle(){        return articleDao.getArticles();    }    @RequestMapping(value = "/videos")    public Object getVideoByArticleId(int a_id){        return videoDao.getVideoByArticleId(a_id);    }}

公众号:【星尘Pro】

github:

推荐阅读

转载地址:http://ndfsi.baihongyu.com/

你可能感兴趣的文章
漫话:为什么你下载小电影的时候进度总是卡在 99% 就不动了?
查看>>
我去!原来大神都是这样玩转「多线程与高并发」的...
查看>>
当你无聊时,可以玩玩 GitHub 上这个开源项目...
查看>>
B 站爆红的数学视频,竟是用这个 Python 开源项目做的!
查看>>
安利 10 个让你爽到爆的 IDEA 必备插件!
查看>>
自学编程的八大误区!克服它!
查看>>
GitHub 上的一个开源项目,可快速生成一款属于自己的手写字体!
查看>>
早知道这些免费 API,我就可以不用到处爬数据了!
查看>>
Java各种集合类的合并(数组、List、Set、Map)
查看>>
JS中各种数组遍历方式的性能对比
查看>>
Mysql复制表以及复制数据库
查看>>
进程管理(一)
查看>>
linux 内核—进程的地址空间(1)
查看>>
存储器管理(二)
查看>>
开局一张图,学一学项目管理神器Maven!
查看>>
Android中的Binder(二)
查看>>
Framework之View的工作原理(一)
查看>>
Web应用架构
查看>>
设计模式之策略模式
查看>>
深究Java中的RMI底层原理
查看>>