Я работаю над проектом, который использует Spring web Flux и DB mongo, и я очень новичок в реактивном программировании и WebFlux.
У меня есть сценарий сохранения в 3 коллекции с использованием одного сервиса.Для каждой коллекции я генерирую идентификатор, используя последовательность, а затем сохраняю их.У меня есть FieldMaster, у которого есть Список, и у каждой Информации Поля есть Список.Мне нужно сохранить FieldMaster, FileInfo и FieldOption.Ниже код, который я использую.Код работает только тогда, когда я работаю в режиме отладки, в противном случае он блокируется в строке ниже
Integer field_seq_id = Integer.parseInt (sequenceCollection.getNextSequence (FIELDINFO) .block (). GetSeqValue ());
Вот полный код
public Mono createMasterData (Mono fieldmaster) {
return fieldmaster.flatMap(fm -> {
return sequencesCollection.getNextSequence(FIELDMASTER).flatMap(seqVal -> {
LOGGER.info("Generated Sequence value :" + seqVal.getSeqValue());
fm.setId(Integer.parseInt(seqVal.getSeqValue()));
List<FieldInfo> fieldInfo = fm.getFieldInfo();
fieldInfo.forEach(field -> {
// saving Field Goes Here
Integer field_seq_id = Integer.parseInt(sequencesCollection.getNextSequence(FIELDINFO).block().getSeqValue()); // stops execution at this line
LOGGER.info("Generated Sequence value Field Sequence:" + field_seq_id);
field.setId(field_seq_id);
field.setMasterFieldRefId(fm.getId());
mongoTemplate.save(field).block();
LOGGER.info("Field Details Saved");
List<FieldOption> fieldOption = field.getFieldOptions();
fieldOption.forEach(option -> {
// saving Field Option Goes Here
Integer opt_seq_id = Integer.parseInt(sequencesCollection.getNextSequence(FIELDOPTION).block().getSeqValue());
LOGGER.info("Generated Sequence value Options Sequence:" + opt_seq_id);
option.setId(opt_seq_id);
option.setFieldRefId(field_seq_id);
mongoTemplate.save(option).log().block();
LOGGER.info("Field Option Details Saved");
});
});
return mongoTemplate.save(fm).log();
});
});
}