SpringBoot和Mybatis配置多个数据库

配置数据库连接信息(application.properties)
下面的是我自己的数据库的配置信息(需修改成自己的数据库信息)

spring.datasource.a.name=amy-blog-datasource
master.datasource.a.driverClassName=com.mysql.cj.jdbc.Driver
master.datasource.a.url=jdbc:mysql://XXXXX:28780/springboot_demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC
master.datasource.a.username=root
master.datasource.a.password=XXXXX
second.datasource.b.name=bmy-blog-datasource
second.datasource.b.driverClassName=com.mysql.cj.jdbc.Driver
second.datasource.b.url=jdbc:mysql://XXXXXX:3306/halodb?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC
second.datasource.b.username=root
second.datasource.b.password=XXXXX

读取配置的这两个数据库注入Bean中

  • a数据库配置到Bean容器中(需要修改自己的Dao路径和Mapper路径)
package com.site.blog.my.core.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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 = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {

    // 精确到 master 目录,以便跟其他数据源隔离
    //需要修改自己的a数据库对应Dao层路径
    static final String PACKAGE = "com.site.blog.my.core.dao.master";
    //需要修改自己的a数据库对应mapper层路径
    static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";
//这里重点说一下,因为自己掉坑里了,我是mapper文件夹下有两个文件夹aa,bb,这里必须填到具体的文件夹,如mapper/aa或mapper/bb

    @Value("${master.datasource.a.url}")
    private String url;

    @Value("${master.datasource.a.username}")
    private String user;

    @Value("${master.datasource.a.password}")
    private String password;

    @Value("${master.datasource.a.driverClassName}")
    private String driverClass;

    @Bean(name = "masterDataSource")
    @Primary
    public DataSource masterDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean(name = "masterTransactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(masterDataSource());
    }

    @Bean(name = "masterSqlSessionFactory")
    @Primary
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MasterDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}

  • B数据库配置到Bean容器中(需要修改自己的Dao路径和Mapper路径)
package com.site.blog.my.core.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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;

@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {

    // 精确到 cluster 目录,以便跟其他数据源隔离
    //需要修改自己的a数据库对应Dao层路径
    static final String PACKAGE = "com.site.blog.my.core.dao.second";
    //需要修改自己的a数据库对应mapper层路径
    static final String MAPPER_LOCATION = "classpath:mapper/second/*.xml";

    @Value("${second.datasource.b.url}")
    private String url;

    @Value("${second.datasource.b.username}")
    private String user;

    @Value("${second.datasource.b.password}")
    private String password;

    @Value("${second.datasource.b.driverClassName}")
    private String driverClass;

    @Bean(name = "secondDataSource")
    public DataSource clusterDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean(name = "secondTransactionManager")
    public DataSourceTransactionManager clusterTransactionManager() {
        return new DataSourceTransactionManager(clusterDataSource());
    }

    @Bean(name = "secondSqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(clusterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(SecondDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }
}
  • 我需要时https协议增加一个接口,接口数据又在另一个数据库中,故此返回JSON数据
@Controller
public class IndexController {
	@Resource
    SecondData secondData;
    @RequestMapping(value = "findTagCqw",method = RequestMethod.GET)
    @ResponseBody
    public String getTagInfo(){
        final List<Object> tagInfo = secondData.findTagInfo();
        return JSON.toJSONString(tagInfo);
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小藕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值