先看一看项目的目录结构
看完整体的项目结构后,下面开始介绍搭建springboot的多数据源搭建步骤。
步骤1:在application.properties中配置数据源
#第一个数据库
spring.datasource.first.driver-class-name = oracle.jdbc.OracleDriver
spring.datasource.first.jdbc-url = jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.first.username = admin
spring.datasource.first.password = admin
#第二个数据库
spring.datasource.second.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.second.jdbc-url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.second.username=admin
spring.datasource.second.password=admin
步骤2:在程序入口类Application.java中添加以下代码
/** * 配置多数据源 */ @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // TODO Auto-generated method stub return builder.sources(MonitorApplication.class); }
步骤3:项目中更改或增加如图红色部分包和文件夹路径
注意:1和2的名称要一致
步骤4:编写DataSourceConfigFirst.java和DataSourceConfigSecond.java
DataSourceConfigFirst.java源代码
import javax.sql.DataSource;
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.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;
//表示这个类为一个配置类
@Configuration
//配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.XXX.mapper.first", sqlSessionFactoryRef = "firstSqlSessionFactory")
public class DataSourceConfigFirst {
// 将这个对象放入Spring容器中
@Bean(name = "firstDataSource")
// 表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.first")
public DataSource getDateSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "firstSqlSessionFactory")
// 表示这个数据源是默认数据源
@Primary
// @Qualifier表示查找Spring容器中名字为firstDataSource的对象
public SqlSessionFactory firstSqlSessionFactory(@Qualifier("firstDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
//-------加入的代码开始:解决mybatis返回map时key值为空不返回的情况----
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setCallSettersOnNulls(true);
bean.setConfiguration(configuration);
//-------加入的代码结束---------------------------------------
bean.setMapperLocations(
// 设置mybatis的xml所在位置
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/first/*.xml"));
return bean.getObject();
}
@Bean("firstSqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate firstsqlsessiontemplate(
@Qualifier("firstSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
DataSourceConfigSecond.java源代码
import javax.sql.DataSource;
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.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;
@Configuration
@MapperScan(basePackages = "com.XXX.mapper.second", sqlSessionFactoryRef = "secondSqlSessionFactory")
public class DataSourceConfigSecond {
@Bean(name = "secondDataSource")
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource getDateSource2() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory secondSqlSessionFactory(@Qualifier("secondDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/second/*.xml"));
return bean.getObject();
}
@Bean("secondSqlSessionTemplate")
public SqlSessionTemplate secondsqlsessiontemplate(
@Qualifier("secondSqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
Springboot多数据源配置完成,现在就可以开发了。开发的时候第一个数据源的mapper接口类和xml文件要写到first目录中,第二个数据源的mapper接口类和xml文件要写到second目录中。