Декларативный клиент Micronaut с базовым URL для каждой среды

Я хотел бы иметь возможность использовать декларативный клиент Micronaut для доступа к другой конечной точке в зависимости от того, нахожусь ли я в локальной среде разработки или в производственной среде.

Я устанавливаю базовый URI моего клиента в application.dev.yml:

myserviceclient:
  baseUri: http://localhost:1080/endpoint

Читая документацию Micronaut, они заставляют разработчика прыгать через несколько обручей, чтобы получить динамическое значение, передаваемое в реальный клиент. На самом деле они довольно запутанные. Итак, я создал такую ​​конфигурацию:

@ConfigurationProperties(PREFIX)
class MyServiceClientConfig {

  companion object {
    const val PREFIX = "myserviceclient"
    const val BASE_URL = "http://localhost:1080/endpoint"
  }

  var baseUri: String? = null

  fun toMap(): MutableMap<String, Any> {
    val m = HashMap<String, Any>()
    if (baseUri != null) {
      m["baseUri"] = baseUri!!
    }

    return m
  }
}

Но, как видите, на самом деле это не считывание значений из application.yml, он просто устанавливает значение const как статическое для класса. я хотел бы, чтоBASE_URL значение должно быть динамическим в зависимости от того, в какой среде я нахожусь.

Чтобы использовать этот класс, я создал такой декларативный клиент:

@Client(MyServiceClientConfig.BASE_URL)
interface MyServiceClient {

  @Post("/user/kfc")
  @Produces("application/json")
  fun sendUserKfc(transactionDto: TransactionDto)
}

В документации показан пример интерполяции значений из карты конфигурации, которая построена следующим образом:

@Get("/api/\${bintray.apiversion}/repos/\${bintray.organization}/\${bintray.repository}/packages") 

Но как бы мне заставить это работать в @Client() аннотация?

Нигде в этом примере они не показывают, как bintrayопределяется / вводится / и т. д. Похоже, это тот же синтаксис, который используется с@Value()аннотация. Я тоже пробовал использовать это, но каждое значение, которое я пытаюсь использовать, оказываетсяnull.

Это очень расстраивает, но я уверен, что мне не хватает ключевой части, которая заставит все это работать.

2 ответа

Решение

Я устанавливаю базовый uri своего клиента в application.dev.yml

Ты наверное хочешь application-dev.yml.

Но как мне заставить это работать в аннотации @Client()?

Вы можете поместить ключ конфигурации в @Client значение, используя что-то вроде @Client("${myserviceclient.baseUri}").

Если вам нужен URL-адрес где-то в вашем коде, используйте это:

      @Value("${micronaut.http.services.occupancy.urls}")
private String occupancyUrl;
Другие вопросы по тегам