首页  >  文章  >  Java  >  如何在 Spring Boot 中将多个 Spring Data JPA 存储库连接到不同的数据源?

如何在 Spring Boot 中将多个 Spring Data JPA 存储库连接到不同的数据源?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-24 21:35:31920浏览

How to Connect Multiple Spring Data JPA Repositories to Different Data Sources in Spring Boot?

Spring Boot、具有多个数据源的 Spring Data JPA

使用 Spring Boot 和 Spring Data JPA 可以将多个存储库连接到不同的数据源。引用的博客文章提供了解决方案,但这里有更详细的方法:

配置:

为每个数据源创建单独的配置类。以下是两个数据源的示例:

CustomerDbConfig(第一个数据源)

<code class="java">@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "customerEntityManager",
        transactionManagerRef = "customerTransactionManager",
        basePackages = {"com.mm.repository.customer"})
public class CustomerDbConfig {

    // Bean definitions for data source, entity manager factory, and transaction manager for first data source
}</code>

OrderDbConfig(第二个数据源)

<code class="java">@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "orderEntityManager",
        transactionManagerRef = "orderTransactionManager",
        basePackages = {"com.mm.repository.order"})
public class OrderDbConfig {

    // Bean definitions for data source, entity manager factory, and transaction manager for second data source
}</code>

实体:

为每个数据源定义实体(模型),例如:

<code class="java">@Entity
@Table(name = "customer")
public class Customer {

    // ...
}

@Entity
@Table(name = "order")
public class Order {

    // ...
}</code>

存储库:

为每个实体创建存储库,例如:

<code class="java">public interface CustomerRepository extends JpaRepository<Customer, Integer> {}

public interface OrderRepository extends JpaRepository<Order, Integer> {}</code>

Application(主类):

在主应用程序类中,确保创建了所有必需的 Bean,并设置了 Spring 应用程序上下文。

<code class="java">@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}</code>

属性:

在 application.properties 文件中配置两个数据源,包括详细信息,例如 URL、用户名、密码和驱动程序类名称。

<code class="properties"># Customer Data Source
spring.datasource.primary.url=...
spring.datasource.primary.username=...
spring.datasource.primary.password=...
spring.datasource.primary.driverClassName=...

# Order Data Source
spring.datasource.secondary.url=...
spring.datasource.secondary.username=...
spring.datasource.secondary.password=...
spring.datasource.secondary.driverClassName=...</code>

故障排除:

如果遇到与丢失或重复的 beans 相关的异常,请确保:

  • 配置类中的bean定义是唯一的。
  • 每个存储库的基础包都是正确的。
  • 数据源属性在应用程序中配置正确.properties。
  • 每个 @Transactional 注释为相应的数据源指定正确的事务管理器。

以上是如何在 Spring Boot 中将多个 Spring Data JPA 存储库连接到不同的数据源?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn