springboot配置druid多数据源的示例代码

下面是“springboot配置druid多数据源的示例代码”的完整攻略。

目录

准备工作

在开始配置Druid多数据源之前,我们需要先进行一些准备工作:

  1. 确认使用的Spring Boot版本,本示例使用的是 2.4.2 版本。
  2. 添加相关依赖,包括 spring-boot-starter-jdbcdruid-spring-boot-starter 等。
<dependencies>
    <!-- Spring Boot JDBC依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <!-- Druid连接池依赖 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.6</version>
    </dependency>
    <!-- MySQL连接驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
</dependencies>

配置Druid数据源

application.yml 配置文件中添加如下配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
    filters: stat
    maxActive: 20
    initialSize: 1
    maxWait: 60000
    minIdle: 1
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false

这里我们使用的是Druid连接池来管理数据源,因此需要设置 type 参数为 com.alibaba.druid.pool.DruidDataSource,并且添加Druid连接池的配置项,比如 maxActiveinitialSize 等。

配置多数据源

添加多数据源配置类 DataSourceConfig,用于创建多个数据源,并通过 @Primary 注解指定默认数据源。

@Configuration
public class DataSourceConfig {

    @Bean(name = "dataSource1")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource1() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource2")
    public DataSource dataSource2() {
        return DruidDataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "dynamicDataSource")
    public DataSource dynamicDataSource(@Qualifier("dataSource1") DataSource dataSource1,
                                        @Qualifier("dataSource2") DataSource dataSource2) {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        Map<Object, Object> dataSourceMap = new HashMap<>(2);
        dataSourceMap.put("dataSource1", dataSource1);
        dataSourceMap.put("dataSource2", dataSource2);
        dynamicDataSource.setDefaultTargetDataSource(dataSource1);
        dynamicDataSource.setTargetDataSources(dataSourceMap);
        return dynamicDataSource;
    }

}

在配置类中创建两个数据源 dataSource1dataSource2,并使用 @Qualifier 注解指定对应的 @Bean 名称,这里我们还可以为每个数据源指定不同的属性配置。

然后创建 dynamicDataSource 数据源,这里我们使用了 DynamicDataSource 类,其实现了 AbstractRoutingDataSource 接口,通过重写 determineCurrentLookupKey() 方法来动态切换数据源。

最后添加 @Primary 注解指定默认数据源为 dataSource1

测试多数据源

为了测试多数据源是否配置成功,我们可以添加一个测试方法,依次使用 dataSource1dataSource2 执行SQL语句,确保两个数据源都能正常使用。

@Service
public class UserService {

    @Autowired
    @Qualifier("dynamicDataSource")
    private DataSource dataSource;

    public List<User> listUsers() {
        List<User> userList = new ArrayList<>();
        try (Connection conn = dataSource.getConnection()) {
            Statement statement = conn.createStatement();
            ResultSet rs = statement.executeQuery("SELECT * FROM user");
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getLong("id"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return userList;
    }

    public List<User> listUsers2() {
        List<User> userList = new ArrayList<>();
        try {
            Connection conn = dataSource.getConnection();
            Statement statement = conn.createStatement();
            ResultSet rs = statement.executeQuery("SELECT * FROM user2");
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getLong("id"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return userList;
    }

}

这里我们定义了两个方法 listUsers()listUsers2(),分别使用 dataSource1dataSource2 执行SQL语句,获取查询结果。

示例代码

完整示例代码可以在下面的Github仓库中找到:

https://github.com/rainspooky/springboot-druid-multi-datasource

该示例包含了创建两个数据表 useruser2,以及 @Mapper 接口、实体类等相关代码。你可以直接按照该示例进行配置和测试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot配置druid多数据源的示例代码 - Python技术站

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

相关文章

  • Java实现用户管理系统

    Java实现用户管理系统攻略 系统设计 在实现用户管理系统之前,需要对系统进行设计。以下是设计具体步骤: 1. 需求分析 首先对用户管理系统的需求进行分析,了解该系统的基本功能和操作流程。 2. 数据库设计 根据需求分析,设计数据库表结构,存储用户信息等数据。 3. 系统架构设计 根据需求和数据库设计,设计系统架构,包括系统模块划分、模块间的交互等。 4. …

    Java 2023年5月18日
    00
  • Springboot+AOP实现时间参数格式转换

    下面是”Springboot+AOP实现时间参数格式转换”的完整攻略。 1、背景 在web开发过程中,我们经常需要将前端传过来的时间参数转换成我们需要的格式。如果每次方法处理前都要手动转换,这无疑会增加代码的复杂度和开发时间。因此,我们可以利用Springboot框架提供的AOP功能,在方法执行前进行参数格式转换,从而减少开发时间和复杂度。 2、实现步骤 2…

    Java 2023年6月1日
    00
  • 实例讲解Java的Spring框架中的AOP实现

    实例讲解Java的Spring框架中的AOP实现 什么是AOP? AOP(Aspect-oriented programming)面向切面编程,是一种新的编程思想,它通过定义切面(Aspect)来装配系统,一个切面横切整个系统中的多个点,切面可以通过切点(PointCut)和通知(Advice)来定义在何处以及何时执行程序代码,从而达到复用和降低系统复杂度的…

    Java 2023年5月19日
    00
  • 详解Tomcat常用的过滤器

    详解Tomcat常用的过滤器 Tomcat中的过滤器可以在请求被目标servlet或JSP之前或之后执行某些操作,如修改请求、响应或扩展请求所需的功能。在Web开发中,常用的过滤器有字符编码过滤器、登录验证过滤器、权限控制过滤器等。下面将详细介绍常用的Tomcat过滤器。 字符编码过滤器 字符编码过滤器可以设置HttpServletRequest和HttpS…

    Java 2023年5月20日
    00
  • JSP指令元素(page指令/include指令/taglib指令)复习整理

    JSP指令元素是用于指定JSP页面的配置信息,包括页面的编码方式、引入的Java类库和定义自定义标签库等。常见的JSP指令元素包括page指令、include指令和taglib指令。 page指令元素 page指令元素是最常用的JSP指令元素之一,用于指定JSP页面的各种配置信息,它通常包含在JSP页面的头部位置,并以%@开&#…

    Java 2023年6月15日
    00
  • Spring Security源码解析之权限访问控制是如何做到的

    首先,Spring Security是一个基于Spring框架的安全框架,它提供了身份认证和授权等功能,帮助我们防止各种安全攻击,保障我们的应用程序安全。 Spring Security的权限访问控制是通过访问控制表达式来实现的,可以在配置文件中配置。访问控制表达式包含了许多参数和操作符,用于判断用户是否有权访问特定的资源。具体来说,Spring Secur…

    Java 2023年5月20日
    00
  • 详解基于spring多数据源动态调用及其事务处理

    我来详细讲解一下“详解基于Spring多数据源动态调用及其事务处理”的完整攻略。 1. 简介 本文将介绍如何在Spring框架下使用多数据源,并实现动态选择数据源,同时还将解决数据源切换后事务处理的问题。 2. 多数据源配置 在Spring中,可以通过配置多个DataSource来实现多数据源的支持。以下是一个简单的配置示例: <bean id=&qu…

    Java 2023年5月20日
    00
  • 简易JDBC框架实现过程详解

    下面我来为你详细讲解一下“简易JDBC框架实现过程详解”的完整攻略。 1. 概述 JDBC是一种Java数据库连接机制,它允许Java应用程序通过执行SQL语句与数据库进行交互。JDBC API提供了访问和处理所有类型的关系型数据库管理系统(RDBMS)的标准方法。在实际开发中,使用JDBC API进行数据库操作的过程显得有些繁琐,因此我们可以考虑封装一些工…

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