我有一个 micronaut-data 应用程序,对于复制操作,我需要使用相同的 JPA 存储库来访问多个数据源。我想将它们注入(inject)不同的变量中,例如sourceRepo
和 targetRepo
。数据源在 application.yml
中声明,名称为 default 和 target。如果我使用 @Inject
声明一个存储库变量,它将被初始化以访问默认数据源。
问题是,如何声明注入(inject)的存储库变量以便它访问目标数据源?我可以声明 EntityManager
或 SynchronousTransactionManager
的目标注入(inject),如下所示,这些可以工作。但这些注释对存储库变量或参数都没有影响。
@Inject
@CurrentSession("target")
EntityManager entityManager;
@PersistenceContext(name = "target")
SynchronousTransactionManager<Connection> transactionManager;
最佳答案
回答我自己的问题:目前(从 micronaut-data 1.0.0.RC1 开始)直接为不同的数据源注入(inject)存储库是不可能的。相反,@Repository
注释可以选择接受数据源名称(例如 @Repository("target")
)。这意味着要在不同存储库上使用存储库,需要在特定类中声明。要使用这样的存储库,需要将相应类的实例注入(inject)到使用代码中。
已提议更改此设置 in the micronaut-data project正在考虑中。
关于java - 如何在 micronaut-data 中注入(inject)多个数据源的 JPA 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59737148/