具有多个存储库实现的JPA配置,用于单个存储库

时间:2018-03-25 16:11:06

标签: java spring spring-data-jpa

我有一个场景,我需要有两个不同的单个存储库实现(一次只有一个存储库),基于数据库,存储库实现从中获取数据。

实施例: GroupRepository extends CrudRepository <String,Group>{} GroupSybaseRepository extends GroupRepository <String,Group>{} GroupDB2Repository extends GroupRepository <String,Group>{}

我计划将这些存储库实现在不同的包中并使用includeFilters / excludeFilters与

的解决方案

还有其他更好的方法吗?

3 个答案:

答案 0 :(得分:0)

您可以使用弹簧配置文件。

有两个个人资料名称db2sysbase,并使用@Profile注释相应地标记您的存储库。

运行应用程序时,使用spring.profiles.active系统属性指定要激活的配置文件。

您可以找到示例here

答案 1 :(得分:0)

您可以在单独的位置使用两个存储库,但您可以通过多种方式实现此目的(可能是:-))

但可能是: -

使用下面的不同交易经理: -

StringSource(reinterpret_cast<const byte*>(&message[0]),
         message.size(),
         true,
         new HashFilter(hmac, new StringSink(mac))              
         ); // StringSource

现在,您将在您的上下文中明显拥有多个交易管理器。感谢。

您也可以使用条件存储库。对于包和事务管理器Bean以及其他相关bean,可能是不同的配置(使用基于某些环境变量的@Conditional标记的@Configuration标记的类)文件

答案 2 :(得分:0)

我使用了包含/排除过滤器的组合,唯一不好的部分是我需要在需要在存储库实现之间切换时评论/取消注释特定的过滤器定义。像下面的东西

<context:component-scan base-package="com.concretepage">
 <context:include-filter type="regex" expression="com.concretepage.*.*Util"/>
 <context:exclude-filter type="assignable" expression="com.concretepage.service.IUserService"/>             
</context:component-scan>