Springboot-jdbc

文章介绍了SpringBoot如何通过默认配置支持单数据源,以及如何在需要时配置和管理多个数据源,包括YAML文件配置、自定义配置类和使用Qualifier注解选择特定数据源的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Spring Boot 默认支持一个数据源的自动配置

当您在 Spring Boot 项目中引入数据库依赖(例如 spring-boot-starter-data-jpaspring-boot-starter-jdbc)时,它会自动进行一些默认配置,以便您可以轻松地使用单个数据源。

以下是一些默认的数据源自动配置行为:

  1. 数据源依赖:通过引入适当的 Spring Boot 数据库依赖,例如 spring-boot-starter-data-jpaspring-boot-starter-jdbcspring-boot-starter-data-mongodb,您将获得对相应数据库的自动配置支持。

  2. 数据源配置属性:Spring Boot 提供了默认的数据源配置属性,您可以在应用程序的配置文件(如 application.propertiesapplication.yml)中使用这些属性来配置单个数据源的连接信息。例如,您可以设置数据库的 URL、用户名、密码、驱动程序类等。

  3. 自动创建数据源:Spring Boot 根据配置文件中的属性自动创建数据源。它使用默认的连接池(如 HikariCP)来管理连接池和数据库连接。

  4. 默认的 JdbcTemplate:当您需要执行数据库操作时,Spring Boot 自动为您创建了一个 JdbcTemplate bean。您可以通过 @Autowired 注解将它注入到您的服务类中,并使用它执行 SQL 查询、更新等操作。

需要注意的是,默认的数据源自动配置适用于单个数据源的情况。如果您需要使用多个数据源,您可能需要进行额外的自定义配置,如设置多个数据源、配置多个 JdbcTemplate 等。但是,Spring Boot 仍然提供了便捷的方式来配置和管理多个数据源,您可以根据自己的需求进行扩展和定制。

2.多个数据源的配置

2.1yml文件配置

spring:
  datasource:
    # 第一个数据源
    datasource1:
      url: jdbc:mysql://localhost:3306/database1
      username: user1
      password: password1
      driver-class-name: com.mysql.cj.jdbc.Driver
    # 第二个数据源
    datasource2:
      url: jdbc:mysql://localhost:3306/database2
      username: user2
      password: password2
      driver-class-name: com.mysql.cj.jdbc.Driver

2.2创建两个数据源的配置类 DataSourceConfig1.javaDataSourceConfig2.java,分别配置数据源和相应的 JdbcTemplate

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

@Configuration
public class DataSourceConfig1 {

    @Bean(name = "datasource1")
    public DataSource dataSource1() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/database1")
                .username("user1")
                .password("password1")
                .driverClassName("com.mysql.cj.jdbc.Driver")
                .build();
    }

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


import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

@Configuration
public class DataSourceConfig2 {

    @Bean(name = "datasource2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/database2")
                .username("user2")
                .password("password2")
                .driverClassName("com.mysql.cj.jdbc.Driver")
                .build();
    }

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

2.3最后,可以在业务代码中使用 @Qualifier 注解指定要使用的数据源 bean,并执行数据库操作

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private final JdbcTemplate jdbcTemplate1;
    private final JdbcTemplate jdbcTemplate2;

    @Autowired
    public UserService(@Qualifier("jdbcTemplate1") JdbcTemplate jdbcTemplate1,
                       @Qualifier("jdbcTemplate2") JdbcTemplate jdbcTemplate2) {
        this.jdbcTemplate1 = jdbcTemplate1;
        this.jdbcTemplate2 = jdbcTemplate2;
    }

    public void getUsersFromDataSource1() {
        String sql = "SELECT * FROM users";
        List<User> users = jdbcTemplate1.query(sql, new BeanPropertyRowMapper<>(User.class));
        // 处理从数据源1中获取的用户数据
    }

    public void getUsersFromDataSource2() {
        String sql = "SELECT * FROM users";
        List<User> users = jdbcTemplate2.query(sql, new BeanPropertyRowMapper<>(User.class));
        // 处理从数据源2中获取的用户数据
    }
}

总结来说,Spring Boot 默认支持一个数据源的自动配置,并提供了方便的属性配置和默认的 JdbcTemplate 支持。对于多数据源的需求,您可以通过自定义配置来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值