mysql 多数据源配置文件_SpringBoot多数据源配置详细教程

本文详细介绍了如何在SpringBoot中配置多数据源,包括MySQL数据源、JdbcTemplate、MyBatis和MyBatis-Plus的配置。通过配置文件、数据源类、JdbcTemplate配置类以及MyBatis的MapperScan,实现了数据源切换,支持主数据源和第二个数据源的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章概要简单多数据配置

JdbcTemplate 多数据源配置

mybatis多数据源配置

mybatis-plus多数据源配置

多数据源配置

首先是配置文件

spring:# 数据源配置datasource:ds1:#数据源1driver-class-name:com.mysql.jdbc.Driver # mysql的驱动你可以配置别的关系型数据库url:jdbc:mysql://ip:3306/db1 #数据源地址username:root # 用户名password:root # 密码ds2:# 数据源2driver-class-name:com.mysql.jdbc.Driver # mysql的驱动你可以配置别的关系型数据库url:jdbc:mysql://ip:3307/db2#数据源地址username:root # 用户名password:root # 密码

多数据源配置

增加一个Springboot的配置类

/*** 多数据源配置*/

@Configuration

public class DataSourceConfig {

//主数据源配置 ds1数据源 @Primary

@Bean(name = "ds1DataSourceProperties")

@ConfigurationProperties(prefix = "spring.datasource.ds1")

public DataSourceProperties ds1DataSourceProperties() {

return new DataSourceProperties();

}

//主数据源 ds1数据源 @Primary

@Bean(name = "ds1DataSource")

public DataSource ds1DataSource(@Qualifier("ds1DataSourceProperties") DataSourceProperties dataSourceProperties) {

return dataSourceProperties.initializeDataSourceBuilder().build();

}

//第二个ds2数据源配置 @Bean(name = "ds2DataSourceProperties")

@ConfigurationProperties(prefix = "spring.datasource.ds2")

public DataSourceProperties ds2DataSourceProperties() {

return new DataSourceProperties();

}

//第二个ds2数据源 @Bean("ds2DataSource")

public DataSource ds2DataSource(@Qualifier("ds2DataSourceProperties") DataSourceProperties dataSourceProperties) {

return dataSourceProperties.initializeDataSourceBuilder().build();

}

}

JdbcTemplate多数据源配置

增加一个Springboot配置类

/**

* JdbcTemplate多数据源配置

* 依赖于数据源配置

*

* @see DataSourceConfig

*/

@Configuration

public class JdbcTemplateDataSourceConfig {

//JdbcTemplate主数据源ds1数据源

@Primary

@Bean(name = "ds1JdbcTemplate")

public JdbcTemplate ds1JdbcTemplate(@Qualifier("ds1DataSource") DataSource dataSource) {

return new JdbcTemplate(dataSource);

}

//JdbcTemplate第二个ds2数据源

@Bean(name = "ds2JdbcTemplate")

public JdbcTemplate ds2JdbcTemplate(@Qualifier("ds2DataSource") DataSource dataSource) {

return new JdbcTemplate(dataSource);

}

}

mybatis 多数据源配置

增加一个SpringBoot配置类

mybatis多数据源的原理是根据不同包,调用不同的数据源,你只需要把你的mapper.java和mapper.xml(我喜欢叫dao.java和dao.xml)写在某个package中,springboot自动帮你实现数据源切换

核心代码就这句

@MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")

用来指定包扫描指定sqlSessionTemplateRef

和sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/web/ds2/**/*.xml"));

用来指定mapper.xml的路径

详细配置代码如下

/**

* Mybatis主数据源ds1配置

* 多数据源配置依赖数据源配置

* @see DataSourceConfig

*/

@Configuration

@MapperScan(basePackages ="com.web.ds1.**.dao", sqlSessionTemplateRef = "ds1SqlSessionTemplate")

public class MybatisPlusConfig4ds1 {

//主数据源 ds1数据源

@Primary

@Bean("ds1SqlSessionFactory")

public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {

MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();

sqlSessionFactory.setDataSource(dataSource);

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().

getResources("classpath*:com/web/ds1/**/*.xml"));

return sqlSessionFactory.getObject();

}

@Primary

@Bean(name = "ds1TransactionManager")

public DataSourceTransactionManager ds1TransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Primary

@Bean(name = "ds1SqlSessionTemplate")

public SqlSessionTemplate ds1SqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

/**

* Mybatis 第二个ds2数据源配置

* 多数据源配置依赖数据源配置

* @see DataSourceConfig

*/

@Configuration

@MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")

public class MybatisPlusConfig4ds2 {

//ds2数据源

@Bean("ds2SqlSessionFactory")

public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {

MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();

sqlSessionFactory.setDataSource(dataSource);

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().

getResources("classpath*:com/web/ds2/**/*.xml"));

return sqlSessionFactory.getObject();

}

//事务支持

@Bean(name = "ds2TransactionManager")

public DataSourceTransactionManager ds2TransactionManager(@Qualifier("ds2DataSource") DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Bean(name = "ds2SqlSessionTemplate")

public SqlSessionTemplate ds2SqlSessionTemplate(@Qualifier("ds2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

mybatis-plus 多数据源配置

mybatis-plus是mybatis的增强版,只增加,不影响。也就是说使用mybatis-plus兼容原来所有的mybatis代码和配置。然后又做了很多增加和简化使用,具体看官网教程https://mybatis.plus/

相对于mybatis的多数据源配置就是改了下 SqlSessionFactory

核心代码就是修改mybatis为mybatis-plus,如下

@Bean("ds2SqlSessionFactory")

public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {

MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();

sqlSessionFactory.setDataSource(dataSource);

MybatisConfiguration configuration = new MybatisConfiguration();

configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);

configuration.setJdbcTypeForNull(JdbcType.NULL);

sqlSessionFactory.setConfiguration(configuration);

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().

getResources("classpath*:com/web/ds2/**/*.xml"));

sqlSessionFactory.setPlugins(new Interceptor[]{

new PaginationInterceptor(),

new PerformanceInterceptor()

// .setFormat(true),

});

sqlSessionFactory.setGlobalConfig(new GlobalConfig().setBanner(false));

return sqlSessionFactory.getObject();

}

全部配置代码如下

/**

* Mybatis-plus ds2数据源配置

* 多数据源配置依赖数据源配置

* @see DataSourceConfig

*/

@Configuration

@MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")

public class MybatisPlusConfig4ds2{

//ds2数据源

@Bean("ds2SqlSessionFactory")

public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {

MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();

sqlSessionFactory.setDataSource(dataSource);

MybatisConfiguration configuration = new MybatisConfiguration();

configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);

configuration.setJdbcTypeForNull(JdbcType.NULL);

sqlSessionFactory.setConfiguration(configuration);

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().

getResources("classpath*:com/web/ds2/**/*.xml"));

sqlSessionFactory.setPlugins(new Interceptor[]{

new PaginationInterceptor(),

new PerformanceInterceptor()

// .setFormat(true),

});

sqlSessionFactory.setGlobalConfig(new GlobalConfig().setBanner(false));

return sqlSessionFactory.getObject();

}

@Bean(name = "ds2TransactionManager")

public DataSourceTransactionManager ds2TransactionManager(@Qualifier("ds2DataSource") DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Bean(name = "ds2SqlSessionTemplate")

public SqlSessionTemplate ds2SqlSessionTemplate(@Qualifier("ds2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

/**

* Mybatis-plus 主数据源ds1配置

* 多数据源配置依赖数据源配置

* @see DataSourceConfig

*/

@Configuration

@MapperScan(basePackages ="com.web.ds1.**.dao", sqlSessionTemplateRef = "ds1SqlSessionTemplate")

public class MybatisPlusConfig4ds1 {

//主数据源 ds1数据源

@Primary

@Bean("ds1SqlSessionFactory")

public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {

MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();

sqlSessionFactory.setDataSource(dataSource);

MybatisConfiguration configuration = new MybatisConfiguration();

configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);

configuration.setJdbcTypeForNull(JdbcType.NULL);

sqlSessionFactory.setConfiguration(configuration);

sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().

getResources("classpath*:com/ds1/web/ds1/**/*.xml"));

sqlSessionFactory.setPlugins(new Interceptor[]{

new PaginationInterceptor(),

new PerformanceInterceptor()

// .setFormat(true),

});

sqlSessionFactory.setGlobalConfig(new GlobalConfig().setBanner(false));

return sqlSessionFactory.getObject();

}

@Primary

@Bean(name = "ds1TransactionManager")

public DataSourceTransactionManager ds1TransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {

return new DataSourceTransactionManager(dataSource);

}

@Primary

@Bean(name = "ds1SqlSessionTemplate")

public SqlSessionTemplate ds1SqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {

return new SqlSessionTemplate(sqlSessionFactory);

}

}

作者:互联网编程

链接:https://www.jianshu.com/p/dfd5ae340011

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值