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

Spring Boot多MongoDB配置下SpelEvaluationException异常求助

问题原因

你遇到的EL1057E: No bean resolver registered错误,是因为自定义ReactiveMongoTemplate时,对应的MongoMappingContext没有注册Spring容器的Bean解析器,导致SpEL表达式无法解析@prefixSupplier这个容器中的bean。

解决步骤

需要手动为每个自定义的ReactiveMongoTemplate配置带有Bean解析器的MongoMappingContext,具体修改如下:

1. 在MultipleMongoConfiguration中添加MongoMappingContext配置

为每个数据库实例创建对应的MongoMappingContext,并注入Spring的BeanFactory来设置Bean解析器:

@Configuration
public class MultipleMongoConfiguration {

    // 保留原有的db1Properties、db2Properties、数据库工厂配置...

    // 为db1配置MongoMappingContext
    @Primary
    @Bean(name = "db1MongoMappingContext")
    public MongoMappingContext db1MongoMappingContext(BeanFactory beanFactory) {
        MongoMappingContext mappingContext = new MongoMappingContext();
        // 注册Bean解析器,让SpEL能访问容器中的bean
        mappingContext.setBeanResolver(new BeanFactoryResolver(beanFactory));
        return mappingContext;
    }

    // 为db2配置MongoMappingContext
    @Bean(name = "db2MongoMappingContext")
    public MongoMappingContext db2MongoMappingContext(BeanFactory beanFactory) {
        MongoMappingContext mappingContext = new MongoMappingContext();
        mappingContext.setBeanResolver(new BeanFactoryResolver(beanFactory));
        return mappingContext;
    }

    // 修改db1MongoTemplate的创建,注入对应的MappingContext
    @Primary
    @Bean(name = "db1MongoTemplate")
    public ReactiveMongoTemplate db1MongoTemplate(
            @Qualifier("db1MongoDatabaseFactory") ReactiveMongoDatabaseFactory db1MongoDatabaseFactory,
            @Qualifier("db1MongoMappingContext") MongoMappingContext db1MongoMappingContext) {
        return new ReactiveMongoTemplate(db1MongoDatabaseFactory, db1MongoMappingContext);
    }

    // 修改db2MongoTemplate的创建,注入对应的MappingContext
    @Bean(name = "db2MongoTemplate")
    public ReactiveMongoTemplate db2MongoTemplate(
            @Qualifier("db2MongoDatabaseFactory") ReactiveMongoDatabaseFactory db2MongoDatabaseFactory,
            @Qualifier("db2MongoMappingContext") MongoMappingContext db2MongoMappingContext) {
        return new ReactiveMongoTemplate(db2MongoDatabaseFactory, db2MongoMappingContext);
    }
}

2. 确认prefixSupplier是Spring管理的Bean

确保prefixSupplier类上添加了@Component注解,或者通过@Bean方法在配置类中注册,比如:

@Component
public class PrefixSupplier {
    public String getIdInLowerCase() {
        // 你的业务逻辑
        return "prefix";
    }
}
补充说明

当你排除了自动配置类MongoReactiveDataAutoConfiguration后,Spring不会自动配置带有Bean解析器的MongoMappingContext,所以必须手动设置,让SpEL表达式能够解析容器中的bean引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:41:06