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