SpringBoot: 基于MyBatis的多数据源配置

作者 : 开心源码 本文共4294个字,预计阅读时间需要11分钟 发布时间: 2022-05-14 共201人阅读

前言


之前在使用SpringBoot搭建后端服务的过程中,一般都是访问一个数据库,一个数据源.这次在新的项目中因为使用的MQTT服务,需要进行鉴权操作,但是MQTT服务有多个项目使用,所以它的鉴权数据库在一个单独的数据库中,这时候我们就需要在SpringBoot配置多数据源.

整体来说是比较简单的,但是对于我这个小白也是折腾了一天多,现在也是很多原理没有搞懂,这里只能算是记录一下,方便以后的查找.

配置 application.yml


首先要在 application.yml 中配置两个数据源,这里我就以我工程中为例,主库的数据源叫做main,mqtt数据库叫做mqtt,这里大家可以自己设置,不过多叙述了.具体如下所示.

spring:  datasource:    main:      url: jdbc:mysql://************************************      username: root      password: 123456      driver-class-name: com.mysql.jdbc.Driver    mqtt:      url: jdbc:mysql://************************************      username: root      password: 123456      driver-class-name: com.mysql.jdbc.Driver

多数据源配置类


新添加一个 DataSourceConfig 数据源配置类.具体代码如下所示.

/** * 数据库多数据源配置 */@Configurationpublic class DataSourceConfig {    // GreenRoom主数据库配置    @Primary    @Bean(name = "mainDataSourceProperties")    @ConfigurationProperties(prefix = "spring.datasource.main")    public DataSourceProperties mainDataSourceProperties() {        return new DataSourceProperties();    }    // GreenRoom主数据库 数据源    @Primary    @Bean(name = "mainDataSource")    public DataSource mainDataSource(@Qualifier("mainDataSourceProperties") DataSourceProperties dataSourceProperties) {        return dataSourceProperties.initializeDataSourceBuilder().build();    }    // mqtt数据库数据源配置    @Bean(name = "mqttDataSourceProperties")    @ConfigurationProperties(prefix = "spring.datasource.mqtt")    public DataSourceProperties mqttDataSourceProperties() {        return new DataSourceProperties();    }    // mqtt数据库数据源    @Bean("mqttDataSource")    public DataSource mqttDataSource(@Qualifier("mqttDataSourceProperties") DataSourceProperties dataSourceProperties) {        return dataSourceProperties.initializeDataSourceBuilder().build();    }}

Main和Mqtt数据源配置类


上面已经把多数据源配置类设置完成了,接下来,我们就要Main和Mqtt数据源进行各自单独的配置了,单独配置的意义就在于让Main和Mqtt 去扫描自己的Dao.java和 Dao.xml.

首先我们先看一下,我的项目具体的目录结构,可能不太规范…大家见谅.

接下来,我们就具体看一下main数据源的配置类,这里以我项目中的 GreenRoomDataSourceConfig 为例.

/** * 主数据库Mapper配置 */@Configuration@MapperScan(basePackages ="com.dong.gen.mapper", sqlSessionTemplateRef  = "mainSqlSessionTemplate")public class GreenRoomDataSourceConfig {    // 主数据源 main数据源    @Primary    @Bean("mainSqlSessionFactory")    public SqlSessionFactory mainSqlSessionFactory(@Qualifier("mainDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();        sqlSessionFactory.setDataSource(dataSource);        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().                getResources("classpath*:com/dong/gen/mapper/**/*.xml"));        return sqlSessionFactory.getObject();    }    @Primary    @Bean(name = "mainTransactionManager")    public DataSourceTransactionManager mainTransactionManager(@Qualifier("mainDataSource") DataSource dataSource) {        return new DataSourceTransactionManager(dataSource);    }    @Primary    @Bean(name = "mainSqlSessionTemplate")    public SqlSessionTemplate mainSqlSessionTemplate(@Qualifier("mainSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {        return new SqlSessionTemplate(sqlSessionFactory);    }}

而后再看一下 MqttDataSourceConfig 这个配置类.

/** * MQTT数据库Mapper配置 */@Configuration@MapperScan(basePackages ="com.dong.mqtt.mapper", sqlSessionTemplateRef  = "mqttSqlSessionTemplate")public class MqttDataSourceConfig {    // MQTT数据源    @Bean("mqttSqlSessionFactory")    public SqlSessionFactory mqttSqlSessionFactory(@Qualifier("mqttDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();        sqlSessionFactory.setDataSource(dataSource);        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().                getResources("classpath*:com/dong/mqtt/mapper/*.xml"));        return sqlSessionFactory.getObject();    }    @Bean(name = "mqttTransactionManager")    public DataSourceTransactionManager mqttTransactionManager(@Qualifier("mqttDataSource") DataSource dataSource) {        return new DataSourceTransactionManager(dataSource);    }    @Bean(name = "mqttSqlSessionTemplate")    public SqlSessionTemplate mqttSqlSessionTemplate(@Qualifier("mqttSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {        return new SqlSessionTemplate(sqlSessionFactory);    }} 

这两个文件的核心是扫包的配置代码,具体如下所示.

@MapperScan(basePackages ="com.dong.gen.mapper", sqlSessionTemplateRef  = "mainSqlSessionTemplate")sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().                getResources("classpath*:com/dong/gen/mapper/**/*.xml"));
@MapperScan(basePackages ="com.dong.mqtt.mapper", sqlSessionTemplateRef  = "mqttSqlSessionTemplate")sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().                getResources("classpath*:com/dong/mqtt/mapper/*.xml"));

结语


到此,SpringBoot + MyBatis 多数据源配置就算完成了,假如有任何疑问,欢迎评论,谢谢.

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » SpringBoot: 基于MyBatis的多数据源配置

发表回复