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

使用ConfigurationProperties配置默认micronaut httpClient属性

东方化
2023-03-14

我正在Micronaut中编写一个java库模块,它有一个http客户端。这个想法是我的微服务将使用这个库作为jar依赖项并使用http客户端。

问题陈述:我想在不使用 application.yml 的情况下配置我的 HttpClient。

为什么我不想用application.yml?-因为使用此库的微服务也将拥有自己的< code>application.yml,并且在构建jar时,需要合并两个< code>application.yml文件。虽然技术上可行,但我不想使用这种方法。

场景-在micronaut中有一个名为micronaut.http.client.exception的布尔配置属性,我需要将其设置为false。我可以在application.yml中轻松地将其设置为micronaut.http.client.exception-on-erer-stat=false,但由于上述原因,我想避免这种方法。我想在代码中设置这个。

我尝试了以下两种方法,但都不起作用。

方法1 -使用< code > @ configuration properties

我创建了以下< code > micronathttpclientconfiguration . Java 类,但未设置该属性。

import io.micronaut.context.annotation.ConfigurationProperties;

@ConfigurationProperties("micronaut.http.client")
public class MicronautHttpClientConfiguration {
    private boolean exceptionOnErrorStatus;

    public MicronautHttpClientConfiguration() {
        this.exceptionOnErrorStatus = false;
    }

    public boolean isExceptionOnErrorStatus() {
        return exceptionOnErrorStatus;
    }

    public void setExceptionOnErrorStatus(boolean exceptionOnErrorStatus) {
        this.exceptionOnErrorStatus = exceptionOnErrorStatus;
    }
}

方法2-使用BeanCreatedEventListener

我创建了以下 BeanCreatedEventListener 来尝试在创建时配置 HttpClient,但无法做到。

import io.micronaut.context.event.BeanCreatedEvent;
import io.micronaut.context.event.BeanCreatedEventListener;
import io.micronaut.http.client.HttpClient;

import javax.inject.Singleton;

@Singleton
public class HttpClientBeanCreationEvent implements BeanCreatedEventListener<HttpClient> {
    @Override
    public HttpClient onCreated(BeanCreatedEvent<HttpClient> event) {
        HttpClient httpClient = event.getBean();
        // I have a handle on the HttpClient here, but not really sure how to set that property
        return httpClient;
    }
}

这个问题适用于任何HttpClient配置(如read-timeout)或任何默认的micronaut配置。

更新 1 : 我正在寻找使用 @ConfigurationProperties 的解决方案,因为我意识到如果我使用 BeanCreationEvent 的方法 2,Micronaut 将永远不会遵循 application.yml(对于此属性)中的任何配置,因为 BeanCreationEvent 覆盖了所有这些。这将使实现微服务难以覆盖此属性。

共有1个答案

於德馨
2023-03-14

您应该创建一个向用户公开的声明性客户端,在@client注释中,您可以指定一个配置类

 类似资料:
  • 我正在尝试使用thymeleaf读取属性,但无法使其工作。我有以下属性类别: 我正在尝试使用 但是,没有显示任何内容。 编辑:如果我设置。属性,它起作用了。但是为什么thymeleaf不选择默认值??

  • 与Jquery Mobile自动初始化共同协作 Working with Jquery Mobile's Auto-initialization 不像其他的Jq项目,比如jq和jq ui,Jquery Mobile会在加载到增强特性时马上应用它(远早于document.ready事件发生时)。这些特性会基于Jquery Mobile的默认配置应用,是针对默认的情形设计的,他可能符合你的需求,也可能

  • 我在spring-boot项目中有一个properties类。 现在,我想将的application.properties文件中的其他属性设置默认值。与下面的示例使用@value所做的类似

  • 问题内容: 我正在尝试将我的应用程序升级到新版本的Firebase。我仔细阅读了设置指南,并编辑了所有代码以匹配新语法。但是,当我运行该应用程序时,出现了这两个错误。 我 在AppDelegate中,并将GoogleServices- Info.plist导入到我的项目中。plist也具有所有正确的信息。其他人遇到这个问题或知道如何解决? 问题答案: 这是您的问题的答案: 要配置Firebase,

  • 22.2.2 默认DispatcherServlet配置 如上一节中所述,对每种特殊的bean,DispatcherServlet都会维护一个默认可用的实现的列表。此信息保存在包org.springframework.web.servlet中的文件DispatcherServlet.properties中。 所有的特殊bean都有一些合理的默认值,虽然迟早您将需要对这些bean提供的一个或多个属性

  • 上一小节讲到,DispatcherServlet维护了一个列表,其中保存了其所依赖的所有bean的默认实现。这个列表保存在包org.springframework.web.servlet下的DispatcherServlet.properties文件中。 这些特殊的bean都有一些基本的默认行为。或早或晚,你可能需要对它们提供的一些默认配置进行定制。比如说,通常你需要配置InternalResou