这里讲下如何在一个Spring Boot项目中配置多个数据源:
Mave中添加依赖:
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency>
<!-- Druid 数据连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid}</version>
</dependency>
层级目录结构如下

这边给的例子是配置两个环境dev和test的数据源:
DevDataSourceConfig.class:
@Configuration
@MapperScan(basePackages = DevDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "devSqlSessionFactory")
public class DevDataSourceConfig {
static final String PACKAGE = "com.example.demomybatis.dao.dev";
static final String MAPPER_LOCATION = "classpath:mapper/dev/*.xml";
@Value("${dev.datasource.url}")
private String url;
@Value("${dev.datasource.username}")
private String user;
@Value("${dev.datasource.password}")
private String password;
@Value("${dev.datasource.driverClassName}")
private String driverClass;
@Bean(name = "devDataSource")
@Primary
public DataSource devDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "devTransactionManager")
@Primary
public DataSourceTransactionManager devTransactionManager() {
return new DataSourceTransactionManager(devDataSource());
}
@Bean(name = "devSqlSessionFactory")
@Primary
public SqlSessionFactory devSqlSessionFactory(@Qualifier("devDataSource") DataSource devDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(devDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(DevDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
TestDataSourceConfig.class:
@Configuration
@MapperScan(basePackages = TestDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "testSqlSessionFactory")
public class TestDataSourceConfig {
static final String PACKAGE = "com.example.demomybatis.dao.test";
static final String MAPPER_LOCATION = "classpath:mapper/test/*.xml";
@Value("${test.datasource.url}")
private String url;
@Value("${test.datasource.username}")
private String user;
@Value("${test.datasource.password}")
private String password;
@Value("${test.datasource.driverClassName}")
private String driverClass;
@Bean(name = "testDataSource")
public DataSource testDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "testTransactionManager")
public DataSourceTransactionManager testTransactionManager() {
return new DataSourceTransactionManager(testDataSource());
}
@Bean(name = "testSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource") DataSource testDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(testDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(TestDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
本文详细介绍如何在SpringBoot项目中配置多个数据源,包括使用Mybatis、MySQL连接驱动及Druid数据连接池依赖,通过DevDataSourceConfig和TestDataSourceConfig类实现不同环境的数据源配置。
2万+

被折叠的 条评论
为什么被折叠?



