有没有一种方法可以从单个类创建多个@Client bean

时间:2019-08-26 19:46:08

标签: java kotlin micronaut

我正在尝试使用单个Kotlin类来定义多个具有各自基本网址的micronuat Client bean。我有一个URL列表,这些URL对应于同一个Web应用程序的多个实例,每个实例都有自己的数据集,但是都使用相同的其余端点。因此,我希望能够使用相同的基类启动一堆客户端bean,但每个都有其自己的名称/ url。然后在服务类中,我将能够使用该名称从应用程序上下文中提取bean。

下面我要解决的问题。在其中定义单个abstractClient类,然后使用不同的客户端名称将其扩展很多次。问题是我必须在编译时静态定义所有可能的名称。我希望能够在Name:URL对的yml中定义某种配置数据映射,并自动生成客户端

abstract class abstractClient (
  val name: String
){
  @Get(value = "/getStuff")
  abstract suspend fun getStuff()

@Client("client1")
abstract class Client1: abstractClient("name1")

@Client("client2")
abstract class Client2: abstractClient("name2")

然后我可以通过注入列表并遍历它们以寻找正确的名称来访问服务类中的bean

2 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以从单个类创建多个@Client bean

不是一个班级,不是。

答案 1 :(得分:0)

如果您的同一应用程序部署在多个实例上 那么这两个服务器的应用程序资源路径都相同,但是只有您的应用程序域和端口不同。 因此,在Java中,可以通过编写一个具有所有资源客户端路径/方法的接口并创建单独的类来实现该目标,以使用不同的主机URL来实现您的通用接口。

public interface Base{
  @Get(value = "/getStuff")
  public void getStuff();
}


@Client("client-1 url") // define client-1 url in yml
public class Client1 implements Base{}


@Client("client-2 url") // define client-2 url in yml
public class Client2 implements Base{}