Spring @Bean配置不工作,在开发环境中自动扫描时丢失其配置

agxfikkp  于 2023-04-19  发布在  Spring
关注(0)|答案(1)|浏览(155)

我有一个配置类来创建一个具有特定SSL设置的WebClient。服务中还有另一个WebClient bean,所以我使用了Qualifier annotation。在将其移动到配置类之前,所有设置都在工作,并且post请求成功,但现在如果我想将其用作Bean,则url和httpclient为null。

@Configuration
public class WebConfig {

    @Bean
    @Qualifier("sslClient")
    public WebClient webClient(DeviceConfig config, Credentials credentials, HttpClientManager httpClientManager) {
        HttpClient httpClient = httpClientManager.getHttpClient(credentials);
        return WebClient.builder()
            .clientConnector(new ReactorClientHttpConnector(httpClient))
            .baseUrl(config.url)
            .build();
    }
}

我想使用这个客户端的类看起来像这样:

@Service
@RequiredArgsConstructor
public class ApiClient {
    @Qualifier("sslClient")
    private final WebClient webClient;

    public String postRequest(String body) {
        return webClient.post()
            .contentType(MediaType.APPLICATION_XML)
            .bodyValue(body)
            .retreive()
            .bodyToMono(String.class)
            .block()
    }

}

当我尝试运行此方法时,我收到一条错误消息“无法解析URL”。
如果我从Bean中删除Qualifier,构建会抛出异常,所以很明显它使用的是这个WebClient,而不是另一个。我试图修改代码,将URL移动到postRequest方法,但随后发生了SSLHandshake异常,因为显然clientconnector设置丢失了。为什么Bean没有配置好的设置?
如果我在本地运行应用程序,并使用debug,我会看到url和clientconnector仍然存在于ApiClient webClient设置中。但在开发环境中,由于某种原因,它为null。

wgx48brx

wgx48brx1#

该字段缺少@Autowired注解。请使用

@Autowired
@Qualifier("sslClient")
private final WebClient webClient;

而不是

@Qualifier("sslClient")
private final WebClient webClient;

相关问题