簡體   English   中英

有沒有辦法從單個類創建多個@Client bean

[英]Is there a way to create multiple @Client beans from a single class

我正在嘗試使用單個 Kotlin 類來定義多個 micronuat 客戶端 bean,每個 bean 都有自己的基本 url。 我有一個 url 列表,它們對應於同一個 webapp 的幾個實例,每個實例都有自己的數據集,但都使用相同的其余端點。 所以我希望能夠使用相同的基類啟動一堆客戶端 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")

然后,我可以通過注入一個 List 並遍歷它們以查找正確的名稱來訪問我的服務類中的 bean

有沒有辦法從單個類創建多個@Client bean

不是一個班級,不。

如果您的同一個應用程序部署在多個實例上,那么您的應用程序資源路徑對於兩台服務器都保持相同,但只有您的應用程序域和端口不同。 因此,在 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{}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM