当前位置: 首页 > 知识库问答 >
问题:

Micronaut声明性客户端,每个环境具有基本url

施德元
2023-03-14

我希望能够使用Micronaut的声明性客户端,根据我是在本地开发环境还是在生产环境中,找到不同的endpoint。

我在application.dev.yml中设置客户端的基本uri:

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是如何定义/注入的/etc。这似乎与@Value()注释使用的语法相同。我也尝试过使用它,但我尝试使用的每个值最终都是null

这是非常令人沮丧的,但我肯定我错过了一个关键的部分,这将使所有的工作。

共有2个答案

闾丘玮
2023-03-14

如果你想在代码中的某个地方使用url:

@Value("${micronaut.http.services.occupancy.urls}")
private String occupancyUrl;
冉锋
2023-03-14

我要把我客户的基地设在application.dev.yml

您可能需要application-dev.yml

但是如何在@Client()注释中实现这一点呢?

您可以使用类似于@Client(${myserviceclient.baseUri}”)的方法将配置键放入@Client值中。

 类似资料:
  • 我将使用来自Micronaut文档(声明性Http客户端)的代码-我正在使用Spock 宠物手术。JAVA 我有一个声明式客户端: 我的目标是当我运行一个测试类时,我想调用(@Replaces)另一个类(PetDummy),而不是PetClient,PetDummy类位于我的测试文件夹中 测试类: 然而,在调用PetClient的最后,我也尝试了@Factory注释,但没有成功 PetClient

  • Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ri

  • 尝试使用Micronaut声明性客户端上传多个文件。 http客户端 将多个文件添加到多部分 产品控制器 例外

  • 我正在发送一个请求到一个服务器,它给了我一个200,没有身体(完全可以接受),但是我无法解决如何配置micronaut注释来处理这个问题。无论我尝试什么,它都试图将空响应解码为JSON(至少我认为这是它正在做的,因为它给出了一个意想不到的错误,而不是当身体出错时得到的正常杰克逊错误)。我在微型文档中找不到任何关于如何做到这一点的东西。

  • 我有一个声明式客户端: 我已使用以下命令将客户端超时设置为30秒: 我随机得到: 这种令人讨厌的行为的原因是什么?

  • 当我为我的Micronaut声明性客户端自动连接客户端接口时,我得到这个错误: 正确的方法是什么? 详细资料 我有一个已建立的Grails应用程序,最近我从3升级了它。x到4.0.1。 这个应用程序有一个并行执行多个REST调用的服务,我正在尝试添加一个使用新Micronaut HTTP声明性客户端的新REST调用。 我将客户端库添加到中的: 我的客户端界面如下(在中): 我在中配置了URL: 关