如何为存储库设置特定的DataSource?
是否可以将特定的DataSource
分配给@Repository
?
我想创建一个测试环境,通常我想使用test-datasource,但是一些CrudRepository
应该在不同的DB(生产数据库;只读操作)上运行。
我可以告诉spring哪个数据源用于存储库显式?
public interface MyRepository extends CrudRepository {}
@EnableJpaRepositories
是您问题的答案。 根据非正式文档,这应该与CrudRepository
一起使用。
请参阅此详细教程,了解如何执行此操作。 我没有花时间在这里发布代码,因为你可以直接在其中更清楚地引用代码。
链接到教程……
DataSource
和JpaRepository
都绑定到EntityManager
。 您必须将存储库隔离到单独的包中,以满足您的工作要求。
这是一个例子:
... ...
这取决于你的设计是什么,因为你可以遵循不同的实现,你可以为两个数据源声明两个bean,并在你的代码中指定你想要命中哪个,否则你可以定义两个不同的上下文以及共享上下文,您必须在代码中指定要调用的服务。 这是一个较旧的问题 ,可能会帮助您实现第一种方法
只需在声明EntityManager
时设置@PersistenceContext
注释的name
属性。
@PersistenceContext(name="persistence-unit-name") private EntityManager em;