使用ConfigurationProperties配置默认的micronaut httpClient属性



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

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

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

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

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

方法1-使用@ConfigurationProperties

我创建了以下MicronautHttpClientConfiguration.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;
}
}

p.S.这个问题适用于任何HttpClient配置(如读取超时(或任何默认的micronaut配置

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

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

最新更新