SpringBoot 整合多数据源

mybatis提供的@MapperScan注解中有一个属性叫做sqlSessionTemplateRef,通过给这个属性提供不同的模板实现,可以在同一个项目中使用多数据源。

不过这种方式只能以包的粒度划分,最终的效果大概是:对com.XX.A包使用1号数据源,对com.XX.B包使用2号数据源。

如果需要更精细化的控制,可以考虑使用第三方框架,但不在本文涉及范围内。

GitHub - baomidou/dynamic-datasource-spring-boot-starter: dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务https://github.com/baomidou/dynamic-datasource-spring-boot-starter

依赖

首先引入依赖:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

SpringBoot2.X自带了数据源Hikari,如果是SpringBoot1.X,则需要自己单独引入一下。

当然,用其他数据源(比如druid)也可以。

        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>3.4.5</version>
        </dependency>

配置文件

为了更清晰点,就不把数据库配置文件和主配置文件放一起了。

新建两个properties文件,放在resources目录下,分别存放两个数据源的配置

wms-mysql.properties

jdbc.wms.driverClassName = com.mysql.jdbc.Driver
jdbc.wms.url = jdbc:mysql://localhost:3306/wms_test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc.wms.username = root
jdbc.wms.password = root

wcs-mysql.properties

jdbc.wcs.driverClassName = com.mysql.jdbc.Driver
jdbc.wcs.url = jdbc:mysql://localhost:3306/wcs_test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc.wcs.username = root
jdbc.wcs.password = root

配置类

注意:basePackages配置的包路径,是Dao接口存放的路径,也是当前数据源配置项生效的范围。

第一个数据源配置类:

@Configuration
@PropertySource("classpath:wms-mysql.properties")
@MapperScan(basePackages = "com.zikoo.datasource.demo.wmsdao", sqlSessionTemplateRef = "wmsSqlSessionTemplate")
public class WmsDataSourceConfig {
    @Value("${jdbc.wms.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.wms.url}")
    private String url;

    @Value("${jdbc.wms.username}")
    private String userName;

    @Value("${jdbc.wms.password}")
    private String password;

    @Primary
    @Bean(name = "wmsDataSource")
    public DataSource wmsDataSource() {
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setDriverClassName(driverClassName);
        hikariDataSource.setJdbcUrl(url);
        hikariDataSource.setUsername(userName);
        hikariDataSource.setPassword(password);
        hikariDataSource.setPoolName("wms");
        hikariDataSource.setMaxLifetime(290000);
        hikariDataSource.setMaximumPoolSize(64);
        hikariDataSource.setMinimumIdle(4);
        return hikariDataSource;
    }

    @Primary
    @Bean(name = "wmsSqlSessionFactory")
    public SqlSessionFactory wmsSqlSessionFactory(@Qualifier("wmsDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setVfs(SpringBootVFS.class);

        //配置xml
//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
//                getResources(""));
        return sqlSessionFactory.getObject();
    }

    @Primary
    @Bean(name = "wmsTransactionManager")
    public DataSourceTransactionManager wmsTransactionManager(@Qualifier("wmsDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Primary
    @Bean(name = "wmsSqlSessionTemplate")
    public SqlSessionTemplate wmsSqlSessionTemplate(@Qualifier("wmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

第二个数据源配置类

@Configuration
@PropertySource("classpath:wcs-mysql.properties")
@MapperScan(basePackages = "com.zikoo.datasource.demo.wcsdao", sqlSessionTemplateRef = "wcsSqlSessionTemplate")
public class WcsDataSourceConfig {

    @Value("${jdbc.wcs.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.wcs.url}")
    private String url;

    @Value("${jdbc.wcs.username}")
    private String userName;

    @Value("${jdbc.wcs.password}")
    private String password;

    @Bean(name = "wcsDataSource")
    public DataSource wcsDataSource() {
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setDriverClassName(driverClassName);
        hikariDataSource.setJdbcUrl(url);
        hikariDataSource.setUsername(userName);
        hikariDataSource.setPassword(password);
        hikariDataSource.setPoolName("wcs");
        hikariDataSource.setMaxLifetime(290000);
        hikariDataSource.setMaximumPoolSize(64);
        hikariDataSource.setMinimumIdle(4);
        return hikariDataSource;
    }

    @Bean("wcsSqlSessionFactory")
    public SqlSessionFactory wcsSqlSessionFactory(@Qualifier("wcsDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setVfs(SpringBootVFS.class);

        //配置xml
//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
//                getResources(""));
        return sqlSessionFactory.getObject();
    }

    @Bean(name = "wcsTransactionManager")
    public DataSourceTransactionManager wcsTransactionManager(@Qualifier("wcsDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "wcsSqlSessionTemplate")
    public SqlSessionTemplate wcsSqlSessionTemplate(@Qualifier("wcsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

目录结构

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springboot可以通过使用dynamic-datasource-spring-boot-starter来实现多数据源整合。该启动器基于springboot,可以快速集成多个数据源。一般的思路是根据自定义的配置数据源信息初始化数据源,并使用druid连接池和mybatis进行相关配置。引用 具体步骤可以包括以下几个方面: 1. 引入相关依赖:在项目的pom.xml文件中添加dynamic-datasource-spring-boot-starter、druid-spring-boot-starter和mybatis-spring-boot-starter等依赖。引用 2. 配置数据源信息:在application.yml或application.properties文件中配置多个数据源的信息,包括数据库的连接地址、用户名、密码等。可以使用@ConfigurationProperties注解来绑定配置文件中的数据源信息到对应的实体类中。 3. 初始化数据源:使用Configuration类来初始化数据源。可以自定义一个DynamicDataSourceConfig类,并在其中使用@Bean注解来配置数据源。在该类中可以通过读取配置文件的方式来获取数据源信息,并将其初始化为对应的数据源。 4. 配置mybatis:在application.yml或application.properties文件中配置mybatis的相关信息,如mapper的扫描路径等。 通过以上步骤,就可以实现springboot多数据源整合。当然,以上只是一个基本的思路,具体实现还需要根据项目的实际需求进行调整和扩展。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot实现多数据源的两种方式](https://blog.csdn.net/m0_67401761/article/details/126114612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringBoot整合多数据源的两种方式](https://blog.csdn.net/hongs468/article/details/128469985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值