Декларативный клиент 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;