SpringBoot集成多数据源解析

关于“SpringBoot集成多数据源解析”的完整攻略,我会进行如下的讲解:

一、前置知识

在了解“SpringBoot集成多数据源解析”之前,需要你掌握以下的技术:

  • SpringBoot
  • SpringDataJPA
  • 数据源的概念

二、什么是多数据源

“多数据源”是指在一个应用程序中使用多个数据库连接。

在一个应用程序中,不同的业务功能可能需要操作不同的数据库,而不同的数据库可能具有不同的性质,如MySQL和Oracle的差异就很大。因此,为了保证应用程序的可扩展性和灵活性,就需要在同一个应用程序中集成多个数据源,以满足不同的业务需求。

三、如何实现多数据源

实现多数据源的方法很多,下面我们来介绍两种:

3.1、使用SpringBoot和SpringDataJPA集成多数据源

操作步骤:

  • 1.在pom.xml中添加两个数据库连接的依赖类库:
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  • 2.定义数据源(dataSource)和JdbcTemplate:
@Configuration
public class DataSourceConfig {
    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    @Primary
    @ConfigurationProperties(prefix="spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean(name = "secondaryDataSource")
    @Qualifier("secondaryDataSource")
    @ConfigurationProperties(prefix="spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().type(HikariDataSource.class).build();
    }

    @Bean(name = "primaryJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate(
            @Qualifier("primaryDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(
            @Qualifier("secondaryDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}
  • 3.在application.yml文件中配置数据源信息:
spring:
  datasource:
    primary:
      jdbc-url: jdbc:mysql://10.30.10.149:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
      hikari:
        maximum-pool-size: 10
    secondary:
      jdbc-url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL
      driver-class-name: oracle.jdbc.OracleDriver
      username: system
      password: oracle
      hikari:
        maximum-pool-size: 10
  • 4.编写测试代码:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
    @Autowired
    @Qualifier("primaryJdbcTemplate")
    protected JdbcTemplate jdbcTemplate1;

    @Autowired
    @Qualifier("secondaryJdbcTemplate")
    protected JdbcTemplate jdbcTemplate2;

    @Test
    public void test() throws Exception {
        jdbcTemplate1.update("insert into user(id,name,age) values(?, ?, ?)", 1, "aaa", 20);
        jdbcTemplate2.update("insert into user(id,name,age) values(?, ?, ?)", 1, "bbb", 30);
        List<User> users1 = jdbcTemplate1.query("select * from user", new BeanPropertyRowMapper<>(User.class));
        List<User> users2 = jdbcTemplate2.query("select * from user", new BeanPropertyRowMapper<>(User.class));
        System.out.println("aaa:"+users1.size());
        System.out.println("bbb:"+users2.size());
    }
}

3.2、使用MyBatis Plus集成多数据源

操作步骤:

  • 1.在pom.xml中添加以下依赖类库:
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>
  • 2.在配置文件application.yml中配置不同数据源:
spring:
  datasource:
    # 主数据源
    master:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
      username: root
      password: 123456

    # 从数据源
    slave:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
      username: root
      password: 123456
  • 3.创建多数据源配置类:
@Configuration
public class DataSourceConfig {
    /**
    * 数据源1
    */
    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.master")
    public DataSource masterDataSource() {
        return new HikariDataSource();
    }
    /**
    * 数据源2
    */
    @Bean(name = "slaveDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.slave")
    public DataSource slaveDataSource() {
        return new HikariDataSource();
    }
}
  • 4.创建数据源和MyBatis SqlSessionFactory的配置类:
@Configuration
@MapperScan(basePackages = {"com.example.demo.mapper.slave"}, sqlSessionTemplateRef = "slaveSqlSessionTemplate")
public class SlaveDataSourceConfig {

    @Autowired
    @Qualifier("slaveDataSource")
    private DataSource slaveDataSource;

    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(slaveDataSource); // 使用从数据源
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/slave/*.xml"));
        return factoryBean.getObject();
    }

    @Bean(name = "slaveSqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
  • 5.使用多数据源测试:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MultiDataSourceTest {
    @Autowired
    private UserService userService;

    @Test
    public void testInsert() {
        User user = new User();
        user.setUsername("test");
        user.setPassword("test");
        userService.save(user);
    }

    @Test
    public void testSelect() {
        userService.list().forEach(System.out::println);
    }
}

四、总结

本文介绍了两种实现SpringBoot集成多数据源的方法,并分别给出了示例代码,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot集成多数据源解析 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java中进制的转换,Byte与16进制的转换方法

    Java中可以通过一些方法来进行进制转换,其中包括Byte与16进制的转换方法。下面我们详细来讲解Java中进制的转换以及Byte与16进制的转换方法。 进制的转换 在Java中,我们可以通过四种进制(二进制,八进制,十进制,十六进制)之间进行相互转换。以下是简单介绍每种进制的标识符: 二进制:以0b或0B开头,例如0b1010表示10。 八进制:以0开头,…

    Java 2023年5月26日
    00
  • Spring Security账户与密码验证实现过程

    下面是详细讲解”Spring Security账户与密码验证实现过程”的完整攻略。 Spring Security账户与密码验证实现过程 Spring Security 是一个功能强大的权限验证框架,它提供了多种认证方式,其中最常用的是账户与密码验证方式。本文将介绍实现 Spring Security 账户与密码验证的完整过程。 步骤一:添加 Spring …

    Java 2023年5月20日
    00
  • maven 标签和标签的使用

    Maven是Java项目的一个重要构建工具,它允许我们轻松地管理项目依赖项和插件。 Maven中的repositories标签和pluginRepositories标签可以让我们指定Maven用于下载项目依赖项和插件的远程仓库。 标签 repositories标签让我们指定从哪些远程仓库中下载项目的依赖项。当Maven需要下载依赖项时,它将首先在本地仓库中查…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“InvalidChainException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidChainException”错误。这个错误通常由以下原因之一起: 链无效:如果链无效,则可能会出现此错误。在这种情况下,需要检查链以解决此问题。 链配置错误:如果链配置错误,则可能会出现此错误。在这种情况下,需要检查链配置以解决此问题。 以下是两个实例: 例 1 如果链无效,则可以尝试检查链以解…

    Java 2023年5月5日
    00
  • Java对MySQL数据库进行连接、查询和修改操作方法

    关于“Java对MySQL数据库进行连接、查询和修改操作方法”的完整攻略,我们可以以下列步骤进行: 1. 下载MySQL的JDBC驱动器 Java需要使用MySQL连接器(JDBC驱动器)才能连接MySQL服务器。你可以从MySQL官网上找到驱动器并下载。 下载的链接是:https://dev.mysql.com/get/Downloads/Connecto…

    Java 2023年5月20日
    00
  • java SpringBoot自定义注解,及自定义解析器实现对象自动注入操作

    Java Spring Boot自定义注解及自定义解析器实现对象自动注入操作 在Spring Boot应用程序中,我们可以使用自定义注解和自定义解析器来实现对象自动注入操作。在本文中,我们将详细讲解如何实现Java Spring Boot自定义注解及自定义解析器。 自定义注解 首先,我们需要创建一个自定义注解,用于标记需要自动注入的对象。下面是一个示例: @…

    Java 2023年5月18日
    00
  • 深入理解PHP之OpCode原理详解

    深入理解PHP之OpCode原理详解 背景 在PHP编程中,我们通常编写的PHP代码都需要通过解释器来完成解释运行。PHP解释器在执行解释过程中,需要将PHP代码转换为计算机所能理解的二进制指令。这些二进制指令被称为OpCode,也就是操作码。本文将主要介绍OpCode在PHP解释器中的作用以及原理。 OpCode的作用 在PHP解释器解析PHP代码时,每行…

    Java 2023年5月26日
    00
  • Java 实战练手项目之医院预约挂号系统的实现流程

    Java 实战练手项目之医院预约挂号系统的实现流程 一、项目介绍 医院预约挂号系统是一个基于Java语言的在线医疗预约服务平台,主要服务对象是需要看病的病人和医院医生。本系统支持用户在线预约医生、查询医生信息、医生排班、在线缴费等功能。预约挂号系统不仅可以提高医院服务质量,还可以减少患者的等待时间和节约医院管理资源。 二、系统架构 系统采用了经典的三层架构模…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部