专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

一个最简易的SpringBoot多数据源配置

配置文件 application-dev.yml

spring:
  datasource:
      db1:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        jdbc-url: jdbc:mysql://xxxxxx:3306/guess?useUnicode=true&characterEncoding=utf8
        username: root
        password: 91wangjing.com
      db2:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        jdbc-url: jdbc:mysql://xxxxxx:3306/guess?useUnicode=true&characterEncoding=utf8
        username: readone
        password: op@0118.

数据源1配置文件

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;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * 数据源配置 1
 * @author Yan
 *
 */

@Configuration
@MapperScan(value = { "cn.wolfcode.mapper.reader" }, sqlSessionTemplateRef = "sqlSessionTemplate1")
public class ReadDataSourceConfig {
    @Bean(name = "dataSource1")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    @Primary //配置主数据库
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean(name = "sqlSessionFactory1")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

        bean.setDataSource(dataSource);
        //读的myBatis配置文件位置

        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/reader/*.xml"));
        return bean.getObject();

    }

    @Bean(name = "transactionManager1")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSource1") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate1")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

数据源2配置文件

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;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * 数据源配置 2
 * @author Yan
 **/
@Configuration
@MapperScan(value = { "cn.wolfcode.mapper.writer" }, sqlSessionTemplateRef = "sqlSessionTemplate2")
public class WriterDataSourceConfig{

    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
}

    @Bean(name = "sqlSessionFactory2")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath:mapper/writer/*.xml"));
        return bean.getObject();

    }

    @Bean(name = "transactionManager2")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("dataSource2") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate2")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

在resources下新建两个数据源的xml放置文件夹,这里我以reader和writer命名方便区分

119_1.png

分别指定xml文件namespace对应的Dao

//数据源1
<mapper namespace="cn.wolfcode.mapper.reader.ReadUserDao">
//数据源2
<mapper namespace="cn.wolfcode.mapper.writer.WriterUserDao">

最后,引入对应的Dao测试即可

@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {

    @Autowired
    private ReadUserDao readUserDao;

    @Autowired
    private WriterUserDao writerUserDao;

    @Test
    public void test222(){
        UserDO readUser = readUserDao.get(1);
        System.out.println(readUser);

        UserDO writerUser = writerUserDao.get(1);
        System.out.println(writerUser);
    }
}

测试的时候可能会遇到 jdbcUrl is required with driverClassName的错误,在升级到Spring Boot 2.0后,一些配置及用法有了变化,这里提供一种较简单的方法

在配置文件中使用spring.datasource.jdbc-url,而不是通常使用的spring.datasource.url。

119_2.png

文章永久链接:https://tech.souyunku.com/25114

未经允许不得转载:搜云库技术团队 » 一个最简易的SpringBoot多数据源配置

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们