You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用Micronaut Vault配置客户端时缺失SerdeConfiguration Bean报错

问题:启用Config Client和Vault拉取配置时启动失败,提示缺少SerdeConfiguration Bean

启动应用时在连接Vault服务器前就抛出依赖注入异常,核心错误为找不到io.micronaut.serde.config.SerdeConfiguration类型的Bean。

错误日志

Message: No bean of type [io.micronaut.serde.config.SerdeConfiguration] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: 
new DistributedPropertySourceLocator(ConfigurationClient configurationClient,Duration readTimeout)
--> new DistributedPropertySourceLocator([ConfigurationClient configurationClient],Duration readTimeout)
--> new DefaultCompositeConfigurationClient([ConfigurationClient[] configurationClients])
--> new VaultConfigurationClient([VaultConfigHttpClient configHttpClient],VaultClientConfiguration vaultClientConfiguration,ApplicationConfiguration applicationConfiguration,ExecutorService executorService)
--> new VaultConfigHttpClientV1$Intercepted(BeanResolutionContext $beanResolutionContext,BeanContext $beanContext,Qualifier $qualifier,[List $interceptors])
--> new HttpClientIntroductionAdvice([HttpClientRegistry clientFactory],JsonMediaTypeCodec jsonMediaTypeCodec,List transformers,HttpClientBinderRegistry binderRegistry,ConversionService conversionService)
--> new DefaultNettyHttpClientRegistry(HttpClientConfiguration defaultHttpClientConfiguration,HttpClientFilterResolver httpClientFilterResolver,LoadBalancerResolver loadBalancerResolver,NettyClientSslBuilder nettyClientSslBuilder,ThreadFactory threadFactory,MediaTypeCodecRegistry codecRegistry,EventLoopGroupRegistry eventLoopGroupRegistry,EventLoopGroupFactory eventLoopGroupFactory,BeanContext beanContext,List invocationInstrumenterFactories,[JsonMapper jsonMapper])
--> new JacksonJsonMapper([SerdeRegistry registry])
--> new DefaultSerdeRegistry(BeanContext beanContext,[ObjectSerializer objectSerializer],ObjectDeserializer objectDeserializer,Serde objectArraySerde,SerdeIntrospections introspections)
--> new ObjectSerializer([SerdeIntrospections introspections],SerializationConfiguration configuration)
--> new DefaultSerdeIntrospections([SerdeConfiguration configuration])
io.micronaut.context.exceptions.DependencyInjectionException: Failed to inject value for parameter [configuration] of class: io.micronaut.serde.support.DefaultSerdeIntrospections

当前配置文件(bootstrap.yml)

micronaut:
  application:
    name: my-app
  config-client:
    enabled: true 

vault:
  client:
    uri: http://localhost:8200
    token: hvs.ugHfHLMdA3PBJT6K2GjVdJZ4
    kv-version: V1 
    config:
      enabled: true

Maven配置信息

父依赖与版本属性

<parent>
    <groupId>io.micronaut</groupId>
    <artifactId>micronaut-parent</artifactId>
    <version>3.8.3</version>
</parent>

<properties>
    <packaging>jar</packaging>
    <jdk.version>17</jdk.version>
    <release.version>17</release.version>
    <micronaut.version>3.8.3</micronaut.version>
    <micronaut.runtime>netty</micronaut.runtime>
    <micronaut.data.version>3.9.4</micronaut.data.version>
    <micronaut.security.version>3.9.2</micronaut.security.version>
    <micronaut.serialization.version>1.5.0</micronaut.serialization.version>
</properties>

Maven编译器插件配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <annotationProcessorPaths combine.children="append">
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </path>
            <path>
                <groupId>io.micronaut</groupId>
                <artifactId>micronaut-inject-java</artifactId>
                <version>${micronaut.version}</version>
            </path>
            <path>
                <groupId>io.micronaut.data</groupId>
                <artifactId>micronaut-data-processor</artifactId>
                <version>${micronaut.data.version}</version>
            </path>
            <path>
                <groupId>io.micronaut</groupId>
                <artifactId>micronaut-graal</artifactId>
                <version>${micronaut.version}</version>
            </path>
            <path>
                <groupId>io.micronaut</groupId>
                <artifactId>micronaut-http-validation</artifactId>
                <version>${micronaut.version}</version>
            </path>
            <path>
                <groupId>io.micronaut</groupId>
                <artifactId>micronaut-validation</artifactId>
                <version>${micronaut.version}</version>
            </path>
            <path>
                <groupId>io.micronaut.data</groupId>
                <artifactId>micronaut-data-r2dbc</artifactId>
                <version>${micronaut.data.version}</version>
            </path>
            <path>
                <groupId>io.micronaut</groupId>
                <artifactId>micronaut-http-client-core</artifactId>
                <version>${micronaut.version}</version>
            </path>
            <path>
                <groupId>io.micronaut.discovery</groupId>
                <artifactId>micronaut-discovery-client</artifactId>
                <version>3.2.0</version>
            </path>
            <path>
                <groupId>io.micronaut.serde</groupId>
                <artifactId>micronaut-serde-processor</artifactId>
                <version>${micronaut.serialization.version}</version>
            </path>
            <path>
                <groupId>io.micronaut.serde</groupId>
                <artifactId>micronaut-serde-api</artifactId>
                <version>${micronaut.serialization.version}</version>
            </path>
            <path>
                <groupId>io.micronaut.security</groupId>
                <artifactId>micronaut-security-annotations</artifactId>
                <version>${micronaut.security.version}</version>
            </path>
        </annotationProcessorPaths>
        <compilerArgs>
            <arg>-Amicronaut.processing.group=com.test</arg>
            <arg>-Amicronaut.processing.module=my-app</arg>
        </compilerArgs>
    </configuration>
</plugin>

已尝试操作

  • 在bootstrap.yml中添加micronaut.serde.*相关配置,无效果
  • 怀疑是bootstrap.yml配置遗漏或需要自定义SerdeConfiguration

解决方案

1. 补充Serde运行时核心依赖

你的Maven配置仅添加了Serde的API和注解处理器,但缺少运行时核心依赖。SerdeConfiguration Bean由micronaut-serde-jackson提供,需在<dependencies>块中添加:

<dependency>
    <groupId>io.micronaut.serde</groupId>
    <artifactId>micronaut-serde-jackson</artifactId>
    <version>${micronaut.serialization.version}</version>
</dependency>

2. 调整Serde API依赖位置

micronaut-serde-api是编译时依赖,不是注解处理器,需从annotationProcessorPaths中移除,移到<dependencies>块:

<dependency>
    <groupId>io.micronaut.serde</groupId>
    <artifactId>micronaut-serde-api</artifactId>
    <version>${micronaut.serialization.version}</version>
</dependency>

3. 清理并重新构建项目

执行命令清理现有构建产物,确保注解处理器正确生成Bean元数据:

mvn clean install

4. 无需额外Serde配置

默认的SerdeConfiguration会自动生效,不需要在bootstrap.yml中添加额外的micronaut.serde.*配置,保持现有配置即可。

5. 验证版本兼容性

当前Micronaut 3.8.3与serialization 1.5.0版本匹配,无需调整版本。


内容的提问来源于stack exchange,提问作者Steve Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:00:27