springboot mybatis 多数据源

第一步:配置多数据源

spring:
  datasource:
    price:
    # price-java库
      jdbc-url: jdbc:mysql://xxxxx:xxxx/price?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useSSL=false&allowMultiQueries=true
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: xxx
      password: xxxxx
    smart:
      jdbc-url: jdbc:mysql://xxxxxx:xxxxxx/smart?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useSSL=false&allowMultiQueries=true
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: xxxxx
      password: xxxxxxxx

第二步:数据源配置类   注意:之前在配置文件中设置了驼峰,但使用配置类后 配置文件中的将失效,需要类中配置 
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);//设置驼峰

package com.bchem.priceservice.config;

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;



@Configuration
@MapperScan(basePackages = "com.bchem.priceservice.mapper", sqlSessionTemplateRef  = "priceSqlSessionTemplate")
public class DataSourcePriceConfig {
    @Bean(name = "priceDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.price")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "priceSqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("priceDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        //设置驼峰
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return bean.getObject();
    }

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

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


}
package com.bchem.priceservice.config;

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;

/**
 * @ClassName liweiwei
 * @Description TODO
 * @date 2024/6/28 13:18
 * @Version 1.0
 */

@Configuration
@MapperScan(basePackages = "com.bchem.priceservice.smartmapper", sqlSessionTemplateRef  = "smartSqlSessionTemplate")
public class DataSourceSmartConfig {
    @Bean(name = "smartDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.smart")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "smartSqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("smartDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:smart/*.xml"));
        //设置驼峰
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return bean.getObject();
    }

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

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


}

第三步:接下来就和平时使用类似 写业务类引用就行了 此处省略

可以通过配置多个数据源来实现在Spring Boot中使用MyBatis多数据源。以下是一种常见的配置方式: 1. 在`application.properties`文件中配置第一个数据源的连接信息: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/db1 spring.datasource.username=username1 spring.datasource.password=password1 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 2. 创建一个`DataSource`的Bean来管理第一个数据源: ```java @Configuration @MapperScan(basePackages = "com.example.db1.mapper", sqlSessionTemplateRef = "db1SqlSessionTemplate") public class DataSource1Config { @Primary @Bean(name = "db1DataSource") @ConfigurationProperties(prefix = "spring.datasource") public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Primary @Bean(name = "db1SqlSessionFactory") public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Primary @Bean(name = "db1SqlSessionTemplate") public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } ``` 3. 在`application.properties`文件中配置第二个数据源的连接信息: ```properties spring.second-datasource.url=jdbc:mysql://localhost:3306/db2 spring.second-datasource.username=username2 spring.second-datasource.password=password2 spring.second-datasource.driver-class-name=com.mysql.jdbc.Driver ``` 4. 创建另一个`DataSource`的Bean来管理第二个数据源: ```java @Configuration @MapperScan(basePackages = "com.example.db2.mapper", sqlSessionTemplateRef = "db2SqlSessionTemplate") public class DataSource2Config { @Bean(name = "db2DataSource") @ConfigurationProperties(prefix = "spring.second-datasource") public DataSource db2DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "db2SqlSessionFactory") public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } @Bean(name = "db2SqlSessionTemplate") public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } ``` 这样就配置了两个数据源,分别对应两个不同的数据库。你可以根据自己的需求配置更多的数据源。在使用时,可以在具体的Mapper接口上使用`@Qualifier`注解指定要使用的数据源,例如: ```java @Mapper @Qualifier("db1SqlSessionTemplate") public interface UserMapper1 { // ... } @Mapper @Qualifier("db2SqlSessionTemplate") public interface UserMapper2 { // ... } ``` 这样就可以根据需要选择不同的数据源来执行对应的SQL操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值