如何在 micronaut-data 中为多个数据源注入 JPA 存储库?
How to inject a JPA repository for multiple datasources in micronaut-data?
我有一个 micronaut-data 应用程序,对于复制操作,我需要使用相同的 JPA 存储库来访问多个数据源。我想将它们注入不同的变量,例如sourceRepo
和 targetRepo
。数据源在 application.yml
中声明,名称为 default 和 target。如果我用 @Inject
声明一个存储库变量,它将被初始化以访问 default 数据源。
问题是,我如何声明注入的存储库变量,以便它访问 target 数据源?我可以声明 target 注入 EntityManager
或 SynchronousTransactionManager
如下所示,这些工作。但是这些注释都不会影响存储库变量或参数。
@Inject
@CurrentSession("target")
EntityManager entityManager;
@PersistenceContext(name = "target")
SynchronousTransactionManager<Connection> transactionManager;
回答我自己的问题:目前(从 micronaut-data 1.0.0.RC1 开始)无法直接为不同的数据源注入存储库。相反,@Repository
注解可以选择性地接受一个数据源名称(例如 @Repository("target")
。这意味着要在不同的存储库上使用一个存储库,需要在特定的 class 中声明。要使用这样的需要将相应 class 的实例的存储库注入到使用代码中。
已提议对此进行更改 in the micronaut-data project 并且正在考虑中。
我有一个 micronaut-data 应用程序,对于复制操作,我需要使用相同的 JPA 存储库来访问多个数据源。我想将它们注入不同的变量,例如sourceRepo
和 targetRepo
。数据源在 application.yml
中声明,名称为 default 和 target。如果我用 @Inject
声明一个存储库变量,它将被初始化以访问 default 数据源。
问题是,我如何声明注入的存储库变量,以便它访问 target 数据源?我可以声明 target 注入 EntityManager
或 SynchronousTransactionManager
如下所示,这些工作。但是这些注释都不会影响存储库变量或参数。
@Inject
@CurrentSession("target")
EntityManager entityManager;
@PersistenceContext(name = "target")
SynchronousTransactionManager<Connection> transactionManager;
回答我自己的问题:目前(从 micronaut-data 1.0.0.RC1 开始)无法直接为不同的数据源注入存储库。相反,@Repository
注解可以选择性地接受一个数据源名称(例如 @Repository("target")
。这意味着要在不同的存储库上使用一个存储库,需要在特定的 class 中声明。要使用这样的需要将相应 class 的实例的存储库注入到使用代码中。
已提议对此进行更改 in the micronaut-data project 并且正在考虑中。