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

目录
  • 一、启动类
  • 二、application.yml文件
  • 三、创建配置类
  • 四 、结构
  • 五、多数据源的事物问题

一、启动类

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

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

二、application.yml文件

配置俩个或多个数据库连接,我这里用的是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);
    }
}

四 、结构

可能有人不清楚项目的结构,我在下面放了一张类结构图,能更清晰和方便理解。

注意:和之前的项目的主要区别就是 mapper包多了一个,mapper的xml包也多了一个,不同的数据库mapper放到不同的包内就可以了。

五、多数据源的事物问题

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring\SpringBoot配置连接数据库的方法

    Spring配置连接数据库 设置jdbc.properties jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/SSM jdbc.username=root jdbc.password=root 创建配置类 /** * @Author: Promsing * @Date: 2021/5/30 - 14:52 * @Description:连接数据库的配置类 * @version: 1.

  • SpringBoot4.5.2 整合HikariCP 数据库连接池操作

    目录 SpringBoot4.5.2 整合HikariCP 数据库连接池 引入 application.yaml 输出 HikariCP连接池及其在springboot中的配置 主要配置如下 SpringBoot4.5.2 整合HikariCP 数据库连接池 Spring Boot 2.+默认使用的就是连接池HikariCP 所以,只要引入相关包即可 引入 <dependency> <groupId>org.springframework.boot</groupId>

  • Springboot2.0配置JPA多数据源连接两个mysql数据库方式

    目录 1. 目录结构及配置 2. 配置文件 3. DataSourceConfigurer类 4. 主数据源配置 5. 从数据源配置 6.User实体类模板 7.dao层模板 8.service模板 9.IBaseService接口 1. 目录结构及配置 pom.xml(不要乱放太多,会引起jar冲突,亲身体验) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

  • Springboot连接数据库及查询数据完整流程

    Springboot连接数据库 第一步 springboot继承Mybatis及数据库连接依赖(上一篇文章已经记录 ) 第二步 resources -> application.properties application.properties中增加数据库连接配置 # 增加数据库连接 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/spring?serverTimezone=Asia/Shanghai&useUnicode=true&

  • 使用springboot不自动初始化数据库连接池

    目录 springboot不自动初始化数据库连接池 简介 解决方案 记录下spring boot关于数据库连接池的一个小坑 application.properties配置 先找到这个类 在下面的源码中打个断点 启动项目 springboot不自动初始化数据库连接池 简介 有时候我们想自己动态的初始化数据库连接池,但是springboot 的@SpringBootApplication注解会自动去初始化数据库连接池,不配置的话会启动失败,如下提示 Exception encountered du

  • springboot 如何使用jedis连接Redis数据库

    springboot 使用jedis连接Redis数据库 1. 在 pom.xml 配置文件中添加依赖 <!-- redis 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- jedis 依赖

  • SpringBoot整合Druid实现数据库连接池和监控

    目录 1.Druid的简介 2.创建SpringBoot项目与数据表 2.1 创建项目 2.2 创建数据表 3.Druid实现数据库连接池 3.1 Druid的配置 3.2 创建实体类(Entity层) 3.3 数据库映射层(Mapper层) 3.4 业务逻辑层(Service层) 3.5 控制器方法(Controller层) 3.6 显示页面(View层) 4.Druid实现监控功能 1.Druid的简介 Druid是Java语言中使用的比较多的数据库连接池.Druid还提供了强大的监控和扩展

  • springboot如何连接两个数据库(多个)

    目录 一.启动类 二.application.yml文件 三.创建配置类 四 .结构 五.多数据源的事物问题 一.启动类 1.启动类需要不用加mybatis的@MapperScan注解 @SpringBootApplication public class AppPush {     public static void main(String[] args) {         SpringApplication.run(AppPush.class,args);     } } 二.appli

  • Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法

    前言 本文主要介绍的是关于Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法,分享出来供大家参考学习,下面来看看详细的介绍: 实现方法: 数据源在配置文件中的配置 <pre name="code" class="java"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring

  • thinkphp3.2同时连接两个数据库的简单方法

    因项目需求,需要用到连接两个库,所以封装了个方法,实例如下: tp3.2手册连接数据库 在公共的function.php加入封装的方法 function getCrmModel($name) { // new的model可以根据自己的需求去更改 return new \Home\Model\CrmModel($name); } model代码 <?php namespace Home\Model; class CrmModel extends BaseModel { public functio

  • 同一个sql语句 连接两个数据库服务器

    exec sp_addlinkedserver '逻辑名称','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin '逻辑名称','false',null,'用户名','密码' go 建立完成之后就可以正常使用了 select * from 逻辑名称.数据库名称.dbo.表名称 这是一个完整的sql语句 使用完成之后要,删除掉建立的虚拟连接 exec sp_dropserver '逻辑名称','droplogins'

  • Laravel如何同时连接多个数据库详解

    前言 上文说到thinkphp3.2同时连接两个数据库的文章,然后在总结下laravel同时连接 多个数据库的实例,方便新手学习,db连接以及model连接. 配置.env 文件 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME=root DB_PASSWORD=root DB_HOST_TEST=127.0.0.1 DB_PORT_TEST=3306 DB_DATAB

  • SpringBoot连接使用PostgreSql数据库的方法

    一.介绍 此次更新时间:2020-10-28,现在是上班时间,偷更一下.其实使用IDEA的话无需配置Maven什么的,如果你们公司不是强制要求使用Eclipse的话,只需要有个JDK的环境即可,IDEA自带了一个版本的Maven,还是挺新的,目前IDEA最新版2.2.3的版本.我们也不用按照下面这个步骤去下载Spring Initializr,我们在IDEA中新建项目选择到Maven就行了,干净简洁. 目前在Resources目录下的application大多数是使用yml语法了.现在已经太长时

  • ZendFramework框架实现连接两个或多个数据库的方法

    本文实例讲述了ZendFramework框架实现连接两个或多个数据库的方法.分享给大家供大家参考,具体如下: 配置文件: <db> <adapter>PDO_MSSQL</adapter> <config> <host>localhost</host> <port>1433</port> <username>sa</username> <password>123456<

  • Springboot如何连接远程服务器上的数据库实践

    Springboot项目如何连接远程服务器上的数据库 没有数据库服务器,就在自己的服务器上装了mysql,希望将数据库的mysql开放给外部用户,设置如下. 1.在自己的服务器放开3306的端口,当然也可以限制ip的来源,限制那些ip才能够访问. 2.在远程数据库创建一个以供开放的角色,这个角色你可以根据不同的需求场景,开放某一个数据库,授予不同的权限等.以下我创建了一个用户Akio,允许来自任何ip的用户都可借此登录.当然你也可以根据语法创建更多类型更多场景的用户. 3.授予权限,ALL PR

  • SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页详解

    一. 使用Springboot+Jpa实现对mysql数据库的增删改查和分页功能 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 使用Springboot和jpa对数据库进行操作时,能够大大减少我们的工作量,在jpa中,已经在底层封装好了增删查的功能和sql语句,可以使我们进行快速开发 二.项目过程和配置文件 1.applaction.properties文件配置

  • SpringBoot浅析安全管理之基于数据库认证

    目录 1. 设计数据表 2. 创建项目 3. 配置数据库 4. 创建实体类 5. 创建UserService 6. 配置Spring Security 7.创建Controller 8. 测试 1. 设计数据表 用户表.角色表.用户角色关联表 建表语句 CREATE TABLE `role` ( `id` int(11) NOT NULL, `name` varchar(32) DEFAULT NULL, `nameZh` varchar(32) DEFAULT NULL, PRIMARY KE

随机推荐