mybatis多数据库配置
在实际的项目开发中,会遇到需要连接多个数据库的情况,以下是改造实现连接多个数据库的主要修改配置。
·
前言
在实际的项目开发中,会遇到需要连接多个数据库的情况,以下是改造实现连接多个数据库的主要修改配置
项目示例结构
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── com.bl
│ │ │ │ ├── xx
│ │ │ │ │ ├── test1
│ │ │ │ │ │ ├── mapper
│ │ │ │ │ │ │ └── Test1Mapper.java
│ │ │ │ │ │ └── service
│ │ │ │ │ │ └── Test1Service.java
│ │ │ │ │ │ └── controller
│ │ │ │ │ │ └── Test1Controller.java
│ │ │ │ │ │
│ │ │ │ │ ├── test2
│ │ │ │ │ │ ├── mapper
│ │ │ │ │ │ │ └── Test2Mapper.java
│ │ │ │ │ │ └── service
│ │ │ │ │ │ └── Test2Service.java
│ │ │ │ │ │ └── controller
│ │ │ │ │ │ └── Test2Controller.java
│ │ │ │ │ │
│ │ │ │ │ ├── config
│ │ │ │ │ │ ├── DataSourceConfig.java
│ │ │ │ │ │ ├── DataSourcetest1Config.java
│ │ │ │ │ │ └── DataSourcetest2Config.java
│ │ │ │ │ │
│ │ │ │ │ ├── MybatisMultiDatasourceApplication.java
│ │ │ │ │ └── pojo
│ │ │ │ │ └── User.java
│ │ │ │ │
│ │ │ │ └── resources
│ │ │ │ ├── application.properties
│ │ │ │ ├── mapper_test1
│ │ │ │ │ └── Test1Mapper.xml
│ │ │ │ └── mapper_test2
│ │ │ │ └── Test2Mapper.xml
│ │ │ └── test
│ │ └── pom.xml
数据库配置文件
application.properties
配置文件
#test1 数据库
spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.test1.jdbc-url=jdbc:mysql://192.168.240.110:31552/xx?characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true
spring.datasource.test1.username=
spring.datasource.test1.password=
# test2数据库
spring.datasource.test2.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.test2.jdbc-url = jdbc:mysql://192.168.240.46:3306/xx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&allowMultiQueries=true
spring.datasource.test2.username =
spring.datasource.test2.password =
配置类文件
新建DataSourceConfig
配置文件
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 javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
// dataSourcetest1注解是在没有指明使用哪个数据源的时候指定默认使用的主数据源 DataSourcetest1Config
@Primary
@Bean("dataSourcetest1")
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource dataSourcetest1() {
return DataSourceBuilder.create().build();
}
// DataSourcetest2Config
@Bean("dataSourcetest2")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource dataSourcetest2() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration globalConfiguration() {
return new org.apache.ibatis.session.Configuration();
}
新建DataSourcetest1Config
配置文件
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(
basePackages = "com.bl.xx.test1.mapper",
sqlSessionFactoryRef = "sqlSessionFactorytest1",
sqlSessionTemplateRef = "sqlSessionTemplatetest1")
public class DataSourcetest1Config {
// mapper扫描xml文件的路径
private static final String MAPPER_LOCATION = "classpath:mapper_test1/*.xml";
private DataSource dataSourcetest1;
// 通过构造方法进行注入
public DataSourcetest1Config(@Qualifier("dataSourcetest1") DataSource dataSourcetest1) {
this.dataSourcetest1 = dataSourcetest1;
}
@Bean
public SqlSessionFactory sqlSessionFactorytest1() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// 指定数据源
sqlSessionFactoryBean.setDataSource(dataSourcetest1);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(false);
sqlSessionFactoryBean.setConfiguration(configuration);
/*
获取xml文件资源对象
当Mapper接口所对应的.xml文件与Mapper接口文件分离,存储在 resources
文件夹下的时候,需要手动指定.xml文件所在的路径
*/
Resource[] resources = new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION);
sqlSessionFactoryBean.setMapperLocations(resources);
return sqlSessionFactoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplatetest1() throws Exception {
return new SqlSessionTemplate(sqlSessionFactorytest1());
}
}
注意:
basePackages
是你的mapper类所在目录,请注意test1与test2mapper文件类拆开MAPPER_LOCATION
是你的mapper xml所在目录,一般也放在resources目录下DataSource
是DataSourceConfig 里的test1 数据库对应函数名

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)