如何自己做网站优化,社交网站wap模板,wordpress特定用户,网站源码下载后怎么用在Spring Boot中配置MyBatis的多数据源是一个常见需求#xff0c;尤其是在需要连接多个数据库时#xff0c;下面是详细的步骤指南。
引入依赖
首先#xff0c;在你的pom.xml文件中添加Spring Boot、MyBatis和数据库连接的相关依赖。例如#xff0c;如果你使用的是MySQL数…在Spring Boot中配置MyBatis的多数据源是一个常见需求尤其是在需要连接多个数据库时下面是详细的步骤指南。
引入依赖
首先在你的pom.xml文件中添加Spring Boot、MyBatis和数据库连接的相关依赖。例如如果你使用的是MySQL数据库
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId
/dependency
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.4.1/version
/dependency
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependency本文使用的是springboot 2.6.6版本 配置数据源
在application.yml或application.properties中配置多个数据源。假设我们有两个数据源primary和secondary。
spring:datasource:primary:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/db-ocean?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT%2B8allowMultiQueriestrueusername: rootpassword: 123456secondary:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/db-log?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT%2B8allowMultiQueriestrueusername: rootpassword: 123456注意 是driver-class-name 不是driverClassName 是jdbc-url 不是url 配置数据源和SqlSessionFactory
接下来创建配置类来定义每个数据源及其相关的SqlSessionFactory。
主数据源配置
package com.angel.ocean.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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.angel.ocean.mapper, sqlSessionFactoryRef primarySqlSessionFactory)
public class PrimaryMyBatisConfig {PrimaryBean(name primaryDataSource)ConfigurationProperties(prefix spring.datasource.primary)public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}PrimaryBean(name primarySqlSessionFactory)public SqlSessionFactory primarySqlSessionFactory(Qualifier(primaryDataSource) DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactoryBean new MybatisSqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath:mapper/*.xml));return sessionFactoryBean.getObject();}PrimaryBean(name primaryTransactionManager)public DataSourceTransactionManager primaryTransactionManager(Qualifier(primaryDataSource) DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}次数据源配置
package com.angel.ocean.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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.angel.ocean.log.mapper, sqlSessionFactoryRef secondarySqlSessionFactory)
public class SecondaryMyBatisConfig {Bean(name secondaryDataSource)ConfigurationProperties(prefix spring.datasource.secondary)public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}Bean(name secondarySqlSessionFactory)public SqlSessionFactory secondarySqlSessionFactory(Qualifier(secondaryDataSource) DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sessionFactoryBean new MybatisSqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath:mapper/log/*.xml));return sessionFactoryBean.getObject();}Bean(name secondaryTransactionManager)public DataSourceTransactionManager secondaryTransactionManager(Qualifier(secondaryDataSource) DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}注意 主数据源对应的Mapper目录要与次数据源对应的Mapper目录不能相同如本文主数据源Mappercom.angel.ocean.mapper次数据源Mappercom.angel.ocean.log.mapper要指定下主次数据源的Mapper映射路径。 主数据源Mapper: sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(classpath:mapper/.xml))* 次数据源Mapper: sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“classpath:mapper/log/*.xml”)). 启动类
package com.angel.ocean;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;EnableTransactionManagement
SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}实例验证
可以将服务的业务分为关键业务和其他业务本文将关键业务数据放入db-ocean库中其他业务数据放入db-log库中如操作日志数据放入db-log库通过AOP来实现该功能用户相关的业务数据放入db-ocean库。
代码结构如下 接口代码实例
ApiOperation(value 保存角色信息表, notes 保存角色信息表, consumes application/json, produces application/json, httpMethod POST)
ApiResponses({ApiResponse(code 200, message OK),ApiResponse(code 50000, message service exception)
})
SyslogAnno(添加角色)
PostMapping(/save)
public ApiResultLong save(RequestBody SysRoleDTO dto) {return service.save(dto);
}接口调用截图
db-ocean库数据截图 db-log库数据截图