SpringBoot使用SqlSessionFactory方式配置多数据源
场景:
一个项目操作多个数据库
解决方法:
通过SqlSessionFactory指定的数据源来操作指定目录的XML文件
实现:
1.项目结构:
2.pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<!-- SpringBoot集成mybatis plus框架 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
3.配置yml文件
server:
port: 9099
spring:
application:
name: kingdee-data
datasource:
kingdee-middle:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://localhost:1433;databaseName=kingdee;Persist Security Info=True;Connection Timeout=30
username: root
password: root
gfy:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://localhost:1433;databaseName=gfy;Persist Security Info=True;Connection Timeout=30
username: root
password: root
gfy-002:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://localhost:1433;databaseName=gfy-002;Persist Security Info=True;Connection Timeout=30
username: root
password: root
gfy-005:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://localhost:1433;databaseName=gfy-005;Persist Security Info=True;Connection Timeout=30
username: root
password: root
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml
type-aliases-package: com.sys.kingdeedata.*
configuration:
#开启驼峰映射
map-underscore-to-camel-case: false
call-setters-on-nulls: true
#开启复杂映射
auto-mapping-behavior: full
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
cache-enabled: true
use-generated-keys: true
default-executor-type: simple
#配置全局默认主键类型,实体类就不用加 @TableId(value = "id", type = IdType.AUTO)
global-config:
db-config:
id-type: auto
4.创键读取第一个数据库配置文件配置类并设置为主配置类
package com.sys.kingdeedata.common.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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 org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.sys.kingdeedata.mapper.gfy"}, sqlSessionFactoryRef = "gfySqlSessionFactory")
public class GfyMybatisConfig {
@Bean(name = "gfyDataSource")
@ConfigurationProperties(prefix = "spring.datasource.gfy")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置事务管理器,不然事务不起作用
*
* @return
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource());
}
@Primary
@Bean(name = "gfySqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("gfyDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/gfy/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.sys.kingdeedata.entity");
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}
}
5.有几个数据源就依次创建几个配置类
package com.sys.kingdeedata.common.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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 org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.sys.kingdeedata.mapper.gfy002"}, sqlSessionFactoryRef = "gfy002SqlSessionFactory")
public class Gfy002MybatisConfig {
@Bean(name = "gfy002DataSource")
@ConfigurationProperties(prefix = "spring.datasource.gfy002")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 配置事务管理器,不然事务不起作用
*
* @return
*/
// @Bean
// public PlatformTransactionManager transactionManager() {
// return new DataSourceTransactionManager(this.dataSource());
// }
@Bean(name = "gfy002SqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("gfy002DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/gfy002/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.sys.kingdeedata.entity");
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}
}
6.在mapper包下按照配置创建对应的包,针对Mapper层通过SqlSessionFactory指定数据源来操作。
原文地址:https://blog.csdn.net/weixin_45618937/article/details/143056093
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!