Запрошенный bean-компонент находится в процессе создания Ошибка: Mongo Converter с mongoTemplate Autowire - PullRequest
0 голосов
/ 26 марта 2019

Я пишу пользовательские конвертеры для фильтрации и сохранения моего объекта в mongodb с использованием Spring Data Mongo API. Я пытаюсь внедрить bean-компонент MongoTemplate в мой класс Converter, чтобы я мог получить некоторые основные данные из базы данных.

Я могу получить bean-компонент MongoTemplate внутри метода getSequenceByName в виде отложенной загрузки bean-компонента, но в этом случае я всегда получаю bean-компонент для каждого создания последовательности (я сохраняю большой файл BSON и для каждого узла добавляю одну последовательность как u уникальный ключ).

<mongo:mapping-converter id="mongoConverter">
<mongo:custom-converters base-package="com.gxs.activefoundation.valueobject">
    <mongo:converter ref="documentWriteConverter"/>
</mongo:custom-converters>
</mongo:mapping-converter>

<bean id="documentWriteConverter" class="com.gxs.activefoundation.mongo.converters.RuntimeDocumentWriteConverter">
    <property name="mongoSequenceDao" ref="mongoSequenceDao"/>
</bean>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoConverter" ref="mongoConverter" />
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>

<bean id="mongoTemplateDao" class="com.gxs.activefoundation.dao.impl.MongoTemplateDaoImpl">
    <property name="mongoOperation" ref="mongoTemplate"/>
</bean>

<bean id="mongoSequenceDao" class="com.gxs.activefoundation.dao.impl.MongoSequenceDaoImpl">
    <property name="mongoTemplateDao" ref="mongoTemplateDao"/>
</bean>


@WritingConverter
public class RuntimeDocumentWriteConverter implements Converter<RuntimeDocument, DBObject> {

private MongoSequenceDao mongoSequenceDao;

    public MongoSequenceDao getMongoSequenceDao() {
        return mongoSequenceDao;
    }

    public void setMongoSequenceDao(MongoSequenceDao mongoSequenceDao) {
        this.mongoSequenceDao = mongoSequenceDao;
    }

    @Override
    public DBObject convert(RuntimeDocument runtimeDocument) {
        DBObject dbObject = new BasicDBObject();
        getMongoSequenceDao().getSequenceByName("_zone")
        return dbObject;
    }
}

public class MongoSequenceDaoImpl implements MongoSequenceDao {

    private MongoTemplateDao mongoTemplateDao;

    public MongoTemplateDao getMongoTemplateDao() {
        return mongoTemplateDao;
    }

    public void setMongoTemplateDao(MongoTemplateDao mongoTemplateDao) {
        this.mongoTemplateDao = mongoTemplateDao;
    }

    @Override
    public Long getSequenceByName(String sequenceName) {
        //get sequence id
    }

}

Как я могу выполнить операцию DB READ внутри класса конвертера. Или мне нужно создать несколько bean-компонентов MongoTemplate и использовать их в классе конвертера? Пожалуйста, предложите, есть ли лучший способ, которым я могу достичь этого. Спасибо за вашу помощь.

...