Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA配置,具有针对单个存储库的多存储库实现_Java_Spring_Spring Data Jpa - Fatal编程技术网

Java JPA配置,具有针对单个存储库的多存储库实现

Java JPA配置,具有针对单个存储库的多存储库实现,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,我有一个场景,我需要基于存储库实现从中获取数据的数据库,对单个存储库进行两种不同的实现(一次只有一个存储库处于活动状态) 例如: GroupRepository扩展了crudepository{} GroupSybaseRepository扩展了GroupRepository{} GroupDB2Repository扩展了GroupRepository{} 我计划在不同的包中实现这些存储库,并使用includeFilters/excludeFilters和 还有其他更好的方法吗?您可以使用spr

我有一个场景,我需要基于存储库实现从中获取数据的数据库,对单个存储库进行两种不同的实现(一次只有一个存储库处于活动状态)

例如:
GroupRepository扩展了crudepository{}
GroupSybaseRepository扩展了GroupRepository{}
GroupDB2Repository扩展了GroupRepository{}

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


还有其他更好的方法吗?

您可以使用spring配置文件

有两个概要文件名
db2
sysbase
,并用
@profile
注释相应地标记您的存储库

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


您可以找到一个示例

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

但其中之一可能是:-

使用不同的事务管理器,如下所示:-

@Repository()
@Transactional(value = "syBaseTransactionManager")
public interface GroupSybaseRepository extends GroupRepository <String,Group>{

}

@Repository()
@Transactional(value = "db2TransactionManager")
public interface GroupDB2Repository extends GroupRepository <String,Group>{

}
@Repository()
@事务性(value=“syBaseTransactionManager”)
公共接口GroupSybaseRepository扩展了GroupRepository{
}
@存储库()
@事务性(value=“db2TransactionManager”)
公共接口GroupDB2Repository扩展了GroupRepository{
}
现在,您的上下文中将有多个事务管理器。谢谢


同样,您也可以使用条件存储库。可能是不同的配置(基于某些环境变量,用@configuration标记为@Conditional的类)包和事务管理器bean以及其他相关bean的文件也使用了include/exclude过滤器的组合。唯一不好的部分是,当需要在存储库实现之间切换时,我必须注释/取消注释特定的过滤器定义。像下面这样

<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>  


但是Spring配置文件不是提供了一种方法来隔离应用程序配置的各个部分并使其仅在某些环境中可用吗?这里的环境对于这两个实现都是相同的。在我看来,运行应用程序的DB本身就是一个不同的环境,在任何时候都只有一个是活动的。我们使用active.profile指定哪个是活动的。我认为您正在从dev、qa、prod等方面查看env。这只是spring概要文件的另一个常见示例,一旦您开始在您的上下文中定义环境,您就可以在示例场景之外使用概要文件,例如dev、qa etcSame location,这是可能的吗?我的意思是,在不通过配置限制bean存在的情况下,有可能吗?很抱歉再次询问,但我认为您必须指的是spring jpa实体管理器,而不是事务管理器。两个事务管理器,两个实体管理器,还有两个数据源,可能是您想要一起使用2个DB的任何其他bean?或者其他方式?当然我会结束这个作为答案