springboot多数据源

项目中需要访问两个数据库,自然就得使用多数据源了,采用的mybatis,所以就基于mybatis来搞吧,网上教程什么的乱七八糟,上来先贴一大段没有用的代码,能不能只贴关键点?最后还是找到纯洁的微笑大佬的博客来研究的,简直就是我java启蒙老师。先感谢加膜拜下。码云上也有代码地址,拿下来可以直接跑起来。大部分网上搞的代码,搞下来先解决一堆错误,简直吐血。

参考地址:https://www.cnblogs.com/ityouknow/p/6102399.html

1、首先我项目的结构

springboot多数据源

2、其实重点在于MysqlConfig和SqlserverConfig文件,然后就是mapper用包分开即可,贴代码看下。

package com.example.multidata.datasource;

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.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.example.multidata.mappers.mysql", sqlSessionTemplateRef = "mysqlSqlSessionTemplate")
public class MysqlConfig {

    //将这个对象放入Spring容器中
    @Bean(name = "mysqlDataSource")
    //表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.mysql")
    public DataSource getMysqlDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "mysqlSqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    //@Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource datasource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        return bean.getObject();
    }

    @Bean("mysqlSqlSessionTemplate")
    // 表示这个数据源是默认数据源
    @Primary
    public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }

}

==========================================

package com.example.multidata.datasource;

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 javax.sql.DataSource;

@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.example.multidata.mappers.sqlserver", sqlSessionTemplateRef = "sqlserverSqlSessionTemplate")
public class SqlserverConfig {

    //将这个对象放入Spring容器中
    @Bean(name = "sqlserverDataSource")
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.sqlserver")
    public DataSource getSqlserverDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlserverSqlSessionFactory")
    //@Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory sqlserverSqlSessionFactory(@Qualifier("sqlserverDataSource") DataSource datasource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        return bean.getObject();
    }

    @Bean("sqlserverSqlSessionTemplate")
    public SqlSessionTemplate test1sqlsessiontemplate(@Qualifier("sqlserverSqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }

}

总结我犯的错:名称一定仔细检查,不能搞错误了,不然报错,代码不多,检查起来也不难。另外pom千万别忘记添加数据的驱动,我就少添加一个驱动,报错。其余没什么,代码可以直接拿去用。

其余代码不贴了,代码放在码云上想看其他看源码吧。

https://gitee.com/awith/multidata.git

 

转载于:https://my.oschina.net/uwith/blog/3049905