Spring boot 多数据源配置

本文详细介绍如何在SpringBoot项目中配置多个数据源,包括使用Mybatis、MySQL连接驱动及Druid数据连接池依赖,通过DevDataSourceConfig和TestDataSourceConfig类实现不同环境的数据源配置。

这里讲下如何在一个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();
    }
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值