相关疑难解决方法(0)

无法在 SpEL 中为 Spring Data MongoDB 集合名称解析 bean

我正在尝试使用 Spring Data MongoDB 和 Spring Batch 自定义保存实体类并为其编制索引的集合名称。该类声明如下:

@Document
@CompoundIndex(name = "unique_source", def = "{'fid': 1, 'sid': 1}", unique = true, background = true)
public class VariantSource {
    ...
}
Run Code Online (Sandbox Code Playgroud)

和项目作家:

public class VariantSourceMongoWriter extends MongoItemWriter<VariantSource> {

    public VariantSourceEntityMongoWriter(MongoOperations mongoOperations, String collectionName) {
        setTemplate(mongoOperations);
        setCollection(collectionName);
    }
}
Run Code Online (Sandbox Code Playgroud)

保存工作正常:对象被写入作为参数提供的集合中。问题是索引是在默认集合中创建的,以类名 ( variantSource)命名。

阅读thisthis后,我创建了以下内容:

public class MongoCollections {

    public String getCollectionFilesName() {
        return "my_custom_collection_name"; // TODO Dynamic value
    }
}


@Configuration
public class MongoCollectionsConfiguration {

    @Bean
    public MongoCollections …
Run Code Online (Sandbox Code Playgroud)

spring-batch spring-el spring-data-mongodb spring-boot

7
推荐指数
1
解决办法
2522
查看次数

使用@Document进行mongodb多语言拼写

这与@Document注释中的MongoDB和SpEL表达式有关

这是我创建mongo模板的方式

@Bean
public MongoDbFactory mongoDbFactory() throws UnknownHostException {
    String dbname = getCustid();
    return new SimpleMongoDbFactory(new MongoClient("localhost"), "mydb");
}

@Bean
MongoTemplate mongoTemplate() throws UnknownHostException {
    MappingMongoConverter converter = 
            new MappingMongoConverter(mongoDbFactory(), new MongoMappingContext());
    return new MongoTemplate(mongoDbFactory(), converter);
}
Run Code Online (Sandbox Code Playgroud)

我有一个租户提供者类

@Component("tenantProvider")
public class TenantProvider {

    public String getTenantId() {
      --custome Thread local logic for getting a name
    }
}
Run Code Online (Sandbox Code Playgroud)

和我的域名课程

    @Document(collection = "#{@tenantProvider.getTenantId()}_device")
     public class Device {
    -- my fields here
    }
Run Code Online (Sandbox Code Playgroud)

如你所见,我已经按照帖子中的说明创建了我的mongotemplate,但我仍然得到以下错误

线程"main"中的异常org.springframework.expression.spel.SpelEvaluationException:EL1057E:(pos 1):在上下文中没有注册bean解析器来解析对bean'tenantProvider'的访问

我究竟做错了什么?

java spring mongodb spring-el spring-data-mongodb

5
推荐指数
1
解决办法
2031
查看次数