当前位置: 首页 > 知识库问答 >
问题:

Spring数据重用存储库类

尉迟雅昶
2023-03-14

对于spring boot、spring jpa、spring amqp,我有以下场景:

我的应用程序负责将数据复制到不同的数据库,但使用相同的实体,我必须存储/更新数据的数据库将在运行时根据即将到来的rabbit amqp数据决定。

我知道,使用spring jpa,我们可以拥有多个数据源,而使用@EnableJpaRepositories,我们可以通过如下方式指定基本包来选择repository类:

First DatabaseConfig

@Configuration
@EnableJpaRepositories(basePackages = "com.example.repo1", entityManagerFactoryRef = "firstEntityManagerFactory",
transactionManagerRef = "firstTransactionManager")
public class FirstDatabaseConfig
....

package com.example.repo1;

@Repository
public interface MyRepository extends JpaRepository<MyEntity, Long> {


Second DatabaseConfig

@Configuration
@EnableJpaRepositories(basePackages = "com.example.repo2", entityManagerFactoryRef = "secondEntityManagerFactory",
transactionManagerRef = "secondTransactionManager")
public class SecondDatabaseConfig
....


package com.example.repo2;

@Repository
public interface MyRepository2 extends JpaRepository<MyEntity, Long> {

这对我来说是可行的,但我希望重用repository类,而不是为必须持久化的每个数据库创建一个repository类。

这可能吗?

共有1个答案

司徒杜吟
2023-03-14

https://spring.io/blog/2007/01/23/dynamic-datasource-routing/

AbstractRoutingDataSource应该允许您在使用相同的存储库时完成此操作。

 类似资料:
  • 是否有一种方法可以使通用Spring数据JPA存储库正确处理类似的方法?例如只返回狗,而不返回所有动物?或者至少,最好的变通方法是什么? 它的工作几乎完美,保存每一个动物在自己的桌子上,等等。唯一的问题是:同时返回水豚和狗。这个答案解释说: 这只有在域类使用单表继承时才起作用。我们在引导时能得到的关于domain类的唯一信息是它将是Product对象。因此,对于像findAll()甚至findBy

  • 它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。

  • 现在,当调用“/comments/1”时,我得到了404个错误,所以数据rest没有公开我的存储库。主要问题是“如何模拟存储库方法从数据库中获取数据?” 我的测试类: 据我所知,使用MockBean注释我替换了当前的存储库bean并且它不会被数据rest公开,我们有没有办法将数据预填充到db或存储库方法的模拟调用?

  • 我需要使用spring@Cacheable注释缓存对MongoDB的调用: 不幸的是,使用@Cacheable注释接口中的任何方法都会导致以下异常: 我正在寻找一种方法来缓存对DB的调用(这相当昂贵)。有什么想法吗?

  • 我正在尝试实现一个简单的REST服务,该服务基于具有Spring启动和Spring数据Rest的JPA存储库。(请参阅此教程)如果将以下代码与 gradle 一起使用,则运行良好: 为了让事情变得更简单,我使用Spring boot CLI(“Spring run”命令)尝试了相同的代码。 不幸的是,这似乎不起作用@RepositoryRestResource似乎无法像@RestControlle

  • 我想知道是否有任何机制可以在Spring Data MongoDB存储库中使用带有注释的?我希望能收到我所拥有的文件数量,而不必获取所有文件。 基本上,这在Java中相当于: