如何为存储库设置特定的DataSource?

是否可以将特定的DataSource分配给@Repository

我想创建一个测试环境,通常我想使用test-datasource,但是一些CrudRepository应该在不同的DB(生产数据库;只读操作)上运行。

我可以告诉spring哪个数据源用于存储库显式?

public interface MyRepository extends CrudRepository {}

@EnableJpaRepositories是您问题的答案。 根据非正式文档,这应该与CrudRepository一起使用。

请参阅此详细教程,了解如何执行此操作。 我没有花时间在这里发布代码,因为你可以直接在其中更清楚地引用代码。

链接到教程……

DataSourceJpaRepository都绑定到EntityManager 。 您必须将存储库隔离到单独的包中,以满足您的工作要求。

这是一个例子:

     ...       ...   

这取决于你的设计是什么,因为你可以遵循不同的实现,你可以为两个数据源声明两个bean,并在你的代码中指定你想要命中哪个,否则你可以定义两个不同的上下文以及共享上下文,您必须在代码中指定要调用的服务。 这是一个较旧的问题 ,可能会帮助您实现第一种方法

只需在声明EntityManager时设置@PersistenceContext注释的name属性。

 @PersistenceContext(name="persistence-unit-name") private EntityManager em;