启用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
相关产品推荐
相关产品推荐

