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

Spring Boot中Aerospike与Mongo Bean冲突导致启动失败

问题:Mongo与Aerospike共存时MappingAerospikeConverter Bean注入冲突

应用同时使用Mongo和Aerospike数据库,在创建AerospikeConfig配置类时需要自动装配MappingAerospikeConverter,但启动时出现内部Bean名称冲突,导致构造器参数匹配失败。

错误信息

应用启动失败

描述:
org.springframework.data.aerospike.convert.MappingAerospikeConverter构造器的第1个参数需要单个Bean,但找到3个:

  • org.springframework.data.aerospike.convert.CustomConversions:定义为null
  • customConversions:由类路径资源[com/spring/rule/engine/config/RuleEngineConfig.class]中的方法'customConversions'定义
  • mongoCustomConversions:由类路径资源[org/springframework/boot/autoconfigure/data/mongo/MongoDataConfiguration.class]中的方法'mongoCustomConversions'定义

相关配置代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.aerospike.cache.AerospikeCacheManager;
import org.springframework.data.aerospike.convert.AerospikeTypeAliasAccessor;
import org.springframework.data.aerospike.convert.MappingAerospikeConverter;
import org.springframework.data.aerospike.mapping.AerospikeMappingContext;
import org.springframework.data.mapping.model.SimpleTypeHolder;

import com.aerospike.client.AerospikeClient;

@EnableAutoConfiguration
@Configuration
@Import(value = {MappingAerospikeConverter.class, AerospikeMappingContext.class, AerospikeTypeAliasAccessor.class,
         SimpleTypeHolder.class})
public class AerospikeConfig {

    @Value("${fs.aerospike.hostName}")
    private String hostName;

    @Value("${fs.aerospike.portNumber}")
    private int port;
    
    @Autowired
    private MappingAerospikeConverter mappingAerospikeConverter;
    
    @Bean
    public AerospikeClient aerospike() {
        return new AerospikeClient(hostName, port);
    }
    
    @Bean
    public AerospikeCacheManager cacheManager(AerospikeClient aerospikeClient) {
        return new AerospikeCacheManager(aerospikeClient, mappingAerospikeConverter);
    }
}

解决方案

问题根源

MappingAerospikeConverter的构造器需要注入CustomConversions类型的Bean,但当前Spring容器中存在3个同类型Bean(Mongo的mongoCustomConversions、自定义的customConversions以及Aerospike默认的未实例化Bean),导致自动装配时无法确定选择哪一个。

修改后的配置代码

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.aerospike.cache.AerospikeCacheManager;
import org.springframework.data.aerospike.convert.AerospikeCustomConversions;
import org.springframework.data.aerospike.convert.MappingAerospikeConverter;
import org.springframework.data.aerospike.mapping.AerospikeMappingContext;
import org.springframework.data.mapping.model.SimpleTypeHolder;

import com.aerospike.client.AerospikeClient;

@EnableAutoConfiguration
@Configuration
public class AerospikeConfig {

    @Value("${fs.aerospike.hostName}")
    private String hostName;

    @Value("${fs.aerospike.portNumber}")
    private int port;

    @Bean
    public AerospikeClient aerospike() {
        return new AerospikeClient(hostName, port);
    }

    @Bean
    public AerospikeCustomConversions aerospikeCustomConversions() {
        return new AerospikeCustomConversions(SimpleTypeHolder.DEFAULT);
    }

    @Bean
    public AerospikeMappingContext aerospikeMappingContext(AerospikeCustomConversions aerospikeCustomConversions) {
        AerospikeMappingContext context = new AerospikeMappingContext();
        context.setCustomConversions(aerospikeCustomConversions);
        return context;
    }

    @Bean
    public MappingAerospikeConverter mappingAerospikeConverter(AerospikeMappingContext aerospikeMappingContext,
                                                               AerospikeCustomConversions aerospikeCustomConversions) {
        return new MappingAerospikeConverter(aerospikeMappingContext, aerospikeCustomConversions);
    }

    @Bean
    public AerospikeCacheManager cacheManager(AerospikeClient aerospikeClient,
                                              MappingAerospikeConverter mappingAerospikeConverter) {
        return new AerospikeCacheManager(aerospikeClient, mappingAerospikeConverter);
    }
}

关键说明

  • 移除原配置中不必要的@Import,避免Spring自动创建Bean时的依赖混乱
  • 新增aerospikeCustomConversions Bean,明确为Aerospike创建专属的自定义转换实例,彻底避免与Mongo的实例冲突
  • 手动创建AerospikeMappingContext并关联对应的CustomConversions,确保上下文使用正确的转换规则
  • 通过@Bean方法显式构造MappingAerospikeConverter,传入明确的依赖Bean,消除自动装配时的歧义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:46:03