> 文档中心 > springboot连接两个数据库(多个)

springboot连接两个数据库(多个)


一、启动类

1.启动类需要不用加mybatis的@MapperScan注解

@SpringBootApplicationpublic class AppPush {    public static void main(String[] args) { SpringApplication.run(AppPush.class,args);    }}

二、application.yml文件

  1. 配置俩个或多个数据库连接,我这里用的是postgresql,用mysql等也是一样
spring:  datasource:#    driver-class-name: org.postgresql.Driver#    url: jdbc:postgresql://127.0.0.1/aaa#    username: root#    password: root      one: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://127.0.0.1/aaa username: root password: root      two: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://127.0.0.1/bbb username: root password: root

三、创建配置类

1.注意:@MapperScan 的basePackages就是你包的路径 ,
sqlSessionFactoryRef 可以随便起名 但是着两个类不能重复!
One配置类

package com.wys.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.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;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.DriverManagerDataSource;import javax.sql.DataSource;/** * @program:   * @description: 数据库配置1 * @author: wys * @create: 2019-12-03 16:20 **/@Configuration@MapperScan(basePackages = "com.wys.mapper.**", sqlSessionFactoryRef = "oneSqlSessionFactory")public class OneDataSourceConfig {    @Value("${spring.datasource.one.driver-class-name}")    String driverClass;    @Value("${spring.datasource.one.url}")    String url;    @Value("${spring.datasource.one.username}")    String userName;    @Value("${spring.datasource.one.password}")    String passWord;    @Primary    @Bean(name = "oneDataSource")    @ConfigurationProperties("spring.datasource.one")    public DataSource masterDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(userName); dataSource.setPassword(passWord); return dataSource;    }    @Bean(name = "oneSqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("oneDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()  .getResources("classpath:mybatis/mapper-postgre/*.xml"));  return sessionFactoryBean.getObject();    }    @Bean(name = "oneSqlSessionTemplate")    public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("oneSqlSessionFactory")SqlSessionFactory sqlSessionFactory ) throws Exception { return new SqlSessionTemplate(sqlSessionFactory);    }}

Two配置类

package com.wys.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.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;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.DriverManagerDataSource;import javax.sql.DataSource;/** * @program:   * @description: 数据库配置2 * @author: wys * @create: 2019-12-03 17:03 **/@Configuration@MapperScan(basePackages = "com.wys.mappers",sqlSessionFactoryRef = "twoSqlSessionFactory")public class TwoDataSourceConfig {    @Value("${spring.datasource.two.driver-class-name}")    String driverClass;    @Value("${spring.datasource.two.url}")    String url;    @Value("${spring.datasource.two.username}")    String userName;    @Value("${spring.datasource.two.password}")    String passWord; @Bean(name = "twoDataSource")    @ConfigurationProperties("spring.datasource.two")    public DataSource masterDataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(userName); dataSource.setPassword(passWord); return dataSource;    }    @Bean(name = "twoSqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("twoDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()  .getResources("classpath:mybatis/mapper-postgres/*.xml"));   return sessionFactoryBean.getObject();    } @Bean(name = "twoSqlSessionTemplate")    public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("twoSqlSessionFactory")SqlSessionFactory sqlSessionFactory ) throws Exception { return new SqlSessionTemplate(sqlSessionFactory);    }}

四 、结构

  1. 可能有人不清楚项目的结构,我在下面放了一张类结构图,能更清晰和方便理解。
    注意:和之前的项目的主要区别就是 mapper包多了一个,mapper的xml包也多了一个,不同的数据库mapper放到不同的包内就可以了。

    类结构

    五、多数据源的事物问题

    在使用多数据源时,有可能会遇到事物失败的问题。我单独总结了一个文章。需要的话可以阅读一下。@Transactional注解异常报错之多数据源.