SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据
SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据
1、添加依赖包
<properties>
<java.version>1.8</java.version>
<mybatis.version>2.1.2</mybatis.version>
<mybatis.plugin.version>3.4.2</mybatis.plugin.version>
<pagehelper.version>1.3.0</pagehelper.version>
</properties>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plugin.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
2、禁止SpringBoot自动配置数据源
在启动类注解上添加exclud
import com.github.jeffreyning.mybatisplus.conf.EnableMPP;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableMPP
public class BackApplication {
public static void main(String[] args) {
SpringApplication.run(BackApplication.class, args);
}
/**
* 解决部署之后刷新页面404问题
* @return
*/
@Bean
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
return factory -> {
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/");
factory.addErrorPages(error404Page);
};
}
}
3、配置文件application.yml添加数据库信息
spring:
datasource:
db1:
type: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://xxx/aaa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
username: xxx
password: xxx
db2:
type: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://xxx/bbb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
username: xxx
password: xxx
4、代码中配置db1和db2的数据源
新建类Db1DataSourceConfig
配置MapperLocation路径和MapperScan扫描路径
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.xxx.xxx.mapper.db1.**",sqlSessionFactoryRef = "SqlSessionFactory1")
public class Db1DataSourceConfig {
@Primary
@Bean(name = "DataSource1")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "SqlSessionFactory1")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("DataSource1") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db1/*.xml"));
//bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:db1/*.xml"));
return bean.getObject();
}
@Primary
@Bean(name = "TransactionManager1")
public DataSourceTransactionManager testTransactionManager(@Qualifier("DataSource1") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean(name = "SqlSessionTemplate1")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("SqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
新建类Db2DataSourceConfig
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.xxx.xxx.mapper.db2.**",sqlSessionFactoryRef = "SqlSessionFactory2")
public class Db2DataSourceConfig {
@Resource
private MyBatisPlusConfig myBatisPlusConfig;
// @Primary
@Bean(name = "DataSource2")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
// @Primary
@Bean(name = "SqlSessionFactory2")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("DataSource2") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
//获取mybatis-plus全局配置
GlobalConfig globalConfig = GlobalConfigUtils.defaults();
//mybatis-plus全局配置设置元数据对象处理器为自己实现的那个
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler()); // 手动注入MetaObjectHandler,否则双数据库的时候无法自动填充create_time和update_time
bean.setGlobalConfig(globalConfig);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db2/*.xml"));
return bean.getObject();
}
// @Primary
@Bean(name = "TransactionManager2")
public DataSourceTransactionManager testTransactionManager(@Qualifier("DataSource2") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// @Primary
@Bean(name = "SqlSessionTemplate2")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("SqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
5.新建mapper java 文件
mapper下新建db1与db2文件夹
查询不同数据库分别放入不同文件夹下
6.新建resources/mapper/
下新建db1与db2文件夹
查询不同数据库分别放入不同文件夹下
至此配置完成
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂