springboot多数据源配置

69 篇文章 2 订阅
20 篇文章 0 订阅

Spring Boot 支持多数据源配置,这在需要同时操作多个数据库或者需要将读写分离的应用场景中非常有用。下面我将详细介绍如何在 Spring Boot 应用程序中配置和使用多数据源。

基础概念

  • 数据源: 数据源是用于连接数据库的对象,Spring Boot 默认使用 HikariCP 作为数据源。
  • JDBC: Java Database Connectivity,用于与数据库交互的标准接口。
  • JPA/Hibernate: 用于 ORM 操作的对象关系映射框架。

添加依赖

首先,你需要在 pom.xml 文件中添加相应的依赖。这里我们假设使用 MySQL 数据库,所以需要添加 HikariCP 和 MySQL JDBC 驱动。

<dependencies>
    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- HikariCP 数据源 -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>

    <!-- MySQL JDBC 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

配置多数据源

application.propertiesapplication.yml 文件中配置两个数据源,比如 primarysecondary

application.properties 示例:
# 主数据源
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db?useUnicode=true&characterEncoding=utf8
spring.datasource.primary.username=root
spring.datasource.primary.password=secret
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.hikari.maximum-pool-size=10

# 从数据源
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf8
spring.datasource.secondary.username=root
spring.datasource.secondary.password=secret
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.hikari.maximum-pool-size=5

# JPA 配置
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
application.yml 示例:
spring:
  datasource:
    primary:
      url: jdbc:mysql://localhost:3306/primary_db?useUnicode=true&characterEncoding=utf8
      username: root
      password: secret
      driver-class-name: com.mysql.cj.jdbc.Driver
      hikari:
        maximum-pool-size: 10
    secondary:
      url: jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf8
      username: root
      password: secret
      driver-class-name: com.mysql.cj.jdbc.Driver
      hikari:
        maximum-pool-size: 5
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update

配置 DataSource Bean

在 Spring Boot 中,你可以通过 @Configuration 类来定义 DataSource Bean。下面是一个例子:

@Configuration
public class DataSourceConfig {

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

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

创建 Repository 和 Service

为了使用不同的数据源,你需要为每个数据源创建一个实体类、Repository 和 Service。

实体类 (Entity)
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // Getters and Setters
}
Repository (使用不同的数据源)
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

@Repository(lookup = "secondaryUserRepository")
public interface SecondaryUserRepository extends JpaRepository<User, Long> {
}
Service
@Service
public class UserService {

    private final UserRepository userRepository;
    private final SecondaryUserRepository secondaryUserRepository;

    public UserService(UserRepository userRepository, @Qualifier("secondaryUserRepository") SecondaryUserRepository secondaryUserRepository) {
        this.userRepository = userRepository;
        this.secondaryUserRepository = secondaryUserRepository;
    }

    public List<User> findAllPrimaryUsers() {
        return userRepository.findAll();
    }

    public List<User> findAllSecondaryUsers() {
        return secondaryUserRepository.findAll();
    }
}

这样就完成了基本的多数据源配置。你可以根据实际需求调整数据源的数量和配置细节。如果你需要在同一个实体上切换数据源,可能还需要配置不同的实体管理器工厂 (EntityManagerFactory) 和实体管理器 (EntityManager)。如果你需要进一步的帮助,请告诉我你具体的使用场景,我可以给出更详细的指导。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

svygh123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值