前言
最近在將原有的單體springboot項目搬遷至springcloud的時候出現(xiàn)了啟動項目minio報錯的問題。
Error creating bean with name ‘minioClient’ defined in class path resource [com/ruoyi/clockin_v2/config/MinioConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.minio.MinioClient]: Factory method ‘minioClient’ threw exception; nested exception is java.lang.NoSuchFieldError: Companion之前在啟動單體springboot的時候并未出現(xiàn)這個問題,經(jīng)過bean注冊的過程發(fā)現(xiàn)是在使用okhttp3的HttpUrl.parse(url)的時候報的錯
(通過代碼的追蹤發(fā)現(xiàn)是在執(zhí)行endpoint的時候調(diào)用如下的HttpUrl.parse(endpoint);報錯了)
@Bean
public MinioClient minioClient()
{
HttpUrl parse = HttpUrl.parse(url);
System.out.println(parse.url());
return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
}
通過代碼的追蹤發(fā)現(xiàn)是在執(zhí)行endpoint的時候調(diào)用如下的HttpUrl.parse(endpoint);報錯了。所以可以確定是okhttp出現(xiàn)的問題
private HttpUrl getBaseUrl(String endpoint) {
this.validateNotEmptyString(endpoint, "endpoint");
HttpUrl url = HttpUrl.parse(endpoint);
if (url == null) {
this.validateHostnameOrIPAddress(endpoint);
url = (new HttpUrl.Builder()).scheme("https").host(endpoint).build();
} else {
this.validateUrl(url);
}
return url;
}
然后通過maven依賴可以看到minio里面okhttp版本為4.8.1,但是實際的版本是使用的4.9.3,這是因為項目的springboot依賴的是okhttp的4.9.3的版本文章來源:http://www.zghlxwxcb.cn/news/detail-616814.html
通過以前正常啟動項目的追蹤,發(fā)現(xiàn)minio的正常啟動的okhttp的版本為3.14.9
解決方式
將minio的依賴版本設(shè)置為3.14.9即可文章來源地址http://www.zghlxwxcb.cn/news/detail-616814.html
<!-- minio工具包 -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<!-- 解決minio使用okhttp高版本的時候注入bean實例報錯的問題 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
<scope>compile</scope>
</dependency>
到了這里,關(guān)于解決springboot啟動時minio報錯的問題(注入bean時報錯)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!