您的位置:首页 > 房产 > 建筑 > springboot多数据源配置

springboot多数据源配置

2025/2/1 4:45:17 来源:https://blog.csdn.net/svygh123/article/details/141144967  浏览:    关键词:springboot多数据源配置

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=utf8username: rootpassword: secretdriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10secondary:url: jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf8username: rootpassword: secretdriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 5jpa:show-sql: truehibernate: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)。如果你需要进一步的帮助,请告诉我你具体的使用场景,我可以给出更详细的指导。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com