Spring Boot 多数据源配置教程

Spring Boot 多数据源配置教程

springboot-multiple-dataSources项目地址:https://gitcode.com/gh_mirrors/sp/springboot-multiple-dataSources

项目介绍

本项目旨在展示如何在Spring Boot应用中配置和使用多个数据源。通过本项目,开发者可以学习到如何为不同的数据库配置独立的DataSourceEntityManagerFactoryTransactionManager,从而实现对多个数据库的灵活管理。

项目快速启动

环境准备

  • Java 8 或更高版本
  • Maven
  • 两个数据库实例(例如MySQL和PostgreSQL)

克隆项目

git clone https://github.com/heikehuan/springboot-multiple-dataSources.git
cd springboot-multiple-dataSources

配置数据源

application.properties文件中配置两个数据源的连接信息:

spring.datasource.primary.url=jdbc:mysql://localhost:3306/db1
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.secondary.url=jdbc:postgresql://localhost:5432/db2
spring.datasource.secondary.username=postgres
spring.datasource.secondary.password=postgres
spring.datasource.secondary.driver-class-name=org.postgresql.Driver

配置数据源Bean

DataSourceConfig类中定义两个数据源的Bean:

@Configuration
public class DataSourceConfig {

    @Bean(name = "primaryDataSource")
    @Primary
    @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();
    }
}

配置EntityManagerFactory和TransactionManager

JpaConfig类中配置每个数据源的EntityManagerFactoryTransactionManager

@Configuration
@EnableJpaRepositories(
    basePackages = "com.example.demo.primary",
    entityManagerFactoryRef = "primaryEntityManagerFactory",
    transactionManagerRef = "primaryTransactionManager"
)
public class PrimaryConfig {

    @Bean(name = "primaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
            EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.demo.primary.entity")
                .persistenceUnit("primaryPU")
                .build();
    }

    @Bean(name = "primaryTransactionManager")
    public PlatformTransactionManager primaryTransactionManager(
            @Qualifier("primaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

@Configuration
@EnableJpaRepositories(
    basePackages = "com.example.demo.secondary",
    entityManagerFactoryRef = "secondaryEntityManagerFactory",
    transactionManagerRef = "secondaryTransactionManager"
)
public class SecondaryConfig {

    @Bean(name = "secondaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
            EntityManagerFactoryBuilder builder, @Qualifier("secondaryDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.example.demo.secondary.entity")
                .persistenceUnit("secondaryPU")
                .build();
    }

    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager secondaryTransactionManager(
            @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

启动应用

mvn spring-boot:run

应用案例和最佳实践

应用案例

假设我们有一个电商应用,需要同时连接到MySQL(用于用户数据)和PostgreSQL(用于订单数据)。通过配置多个数据源,我们可以轻松实现这一需求。

最佳实践

  1. 分离配置:将每个数据源的配置分离到不同的配置类中,便于管理和维护。
  2. 命名规范

springboot-multiple-dataSources项目地址:https://gitcode.com/gh_mirrors/sp/springboot-multiple-dataSources

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梅沁维

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

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

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

打赏作者

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

抵扣说明:

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

余额充值