我正在尝试创建一个能够访问 Azure 存储的 Spring Boot 应用程序。
以下是我尝试在 build.gradle
中声明的一些依赖项到目前为止...
implementation 'com.azure:azure-storage-blob:+' // Current Dependency
implementation 'com.azure.spring:azure-spring-boot-starter-storage:+' // Previous Dependency
两者都可以让我访问 BlobServiceClient
我用来访问我的 Azure Blob 容器的类。
在我的application.properties
文件,我有以下属性:
#Storage settings
# Current Attempt
azure.connection=${STORAGE_ACCOUNT_CONNECTION}
# Previous Attempt
azure.storage.account-name=${STORAGE_ACCOUNT_NAME}
azure.storage.account-key=${STORAGE_ACCOUNT_KEY}
azure.storage.blob-endpoint=${STORAGE_ACCOUNT_ENDPOINT}
然后,我在名为 StorageService
的 Spring 服务类中使用这些属性。管理BlobServiceClient
。这是我的两次设置尝试:
1(当前)。
@Autowired
StorageService(@Value("${azure.connection}") String connection)
{
client = new BlobServiceClientBuilder().connectionString(connection).buildClient();
objectMapper = new ObjectMapper();
}
- (上一个)。
@Autowired
StorageService(@Value("${azure.storage.account-name}") String name,
@Value("${azure.storage.account-key}") String key,
@Value("${azure.storage.blob-endpoint}") String endpoint)
{
AzureNamedKeyCredential credential = new AzureNamedKeyCredential(name, key);
client = new BlobServiceClientBuilder().credential(credential).endpoint(endpoint).buildClient();
objectMapper = new ObjectMapper();
}
我什至尝试使用 Java 11 和 Java 17。但是,每次我设法在 Intelli-J 中运行它时,都会收到此错误。
Caused by: java.lang.NoSuchFieldError: NOOP_CONFIGURER
at reactor.netty.ChannelPipelineConfigurer.emptyConfigurer(ChannelPipelineConfigurer.java:40)
at reactor.netty.transport.TransportConfig.<init>(TransportConfig.java:207)
at reactor.netty.transport.ClientTransportConfig.<init>(ClientTransportConfig.java:164)
at reactor.netty.http.client.HttpClientConfig.<init>(HttpClientConfig.java:327)
at reactor.netty.http.client.HttpClientConnect.<init>(HttpClientConnect.java:85)
at reactor.netty.http.client.HttpClient.create(HttpClient.java:393)
at com.azure.core.http.netty.NettyAsyncHttpClientBuilder.build(NettyAsyncHttpClientBuilder.java:141)
at com.azure.core.http.netty.NettyAsyncHttpClientProvider.createInstance(NettyAsyncHttpClientProvider.java:19)
at com.azure.core.implementation.http.HttpClientProviders.createInstance(HttpClientProviders.java:67)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:50)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:40)
at com.azure.core.http.HttpPipelineBuilder.build(HttpPipelineBuilder.java:73)
at com.azure.storage.blob.implementation.util.BuilderHelper.buildPipeline(BuilderHelper.java:138)
at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:135)
at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:114)
at com.trecapps.users.services.StorageService.<init>(StorageService.java:40)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)
... 49 common frames omitted
当我用谷歌搜索"NOOP_CONFIGURER"
时(带引号),我得到 2 个结果,因此这个错误似乎没有得到很好的记录。关于如何启动我的应用程序有什么建议吗?
最佳答案
请检查以下几点。
NoSuchField
,通常表示链接目标类时,该字段 不在这里。但是编译时,类应该有那个字段, 否则代码无法编译。
i.e; it indicates that an application tries to access or modify an object’s field, but that field no longer exists.
- 如果类的定义在运行时可能会发生此错误 已发生不兼容的更改。
如图所示的异常发生在ChannelPipelineConfigurer处。在返回 NOOP_configurer 的空配置方法中,该方法存在于 包 reactor.netty 下的
reactor netty core
中这似乎是由于reactor-netty jar 中的版本不匹配造成的
ChannelPipelineConfigurer.java
package reactor.netty;
import io.netty.channel.Channel;
import reactor.util.annotation.Nullable;
import java.net.SocketAddress;
import static reactor.netty.ReactorNetty.CompositeChannelPipelineConfigurer.compositeChannelPipelineConfigurer;
@FunctionalInterface
public interface ChannelPipelineConfigurer {
static ChannelPipelineConfigurer emptyConfigurer() {
return ReactorNetty.NOOP_CONFIGURER;
}
因此,请检查是否是 Reactor Netty Core 发行版本不兼容造成的,或者是否发生了一个或多个版本冲突,并尝试升级到最新版本的发行 jar,并检查是否存在任何不兼容的依赖项。
要处理 NoSuchFieldError 错误,请尝试清理所有现有的 .class 文件并从头开始编译所有内容。以便验证每个引用的类是否已编译为其最新版本。
但是,如果在运行时仍然抛出错误,则可能必须使用库的一个版本进行编译,但在运行时使用另一版本。您必须验证您的类路径是否包含指定库的正确版本。
关于java - Spring Boot Azure 存储客户端产生 java.lang.NoSuchFieldError : NOOP_CONFIGURER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71994212/