Удалить обработанный файл в потоке Spring интеграции DSL - PullRequest
0 голосов
/ 03 августа 2020

У меня есть такой простой поток, который читает файл из папки и конвертирует содержимое этого файла в несколько сущностей в базе данных (spring-integration-jpa). Только что обнаружил, что я не вижу простого способа удалить обработанный файл из исходного каталога.

Вот код

@Configuration
public class ImportConfiguration {

    private static final Logger logger = LoggerFactory.getLogger(ImportConfiguration.class);

    @Value("${source.dir.path}")
    private String sourceDirectoryPath;

    @Value("${dest.dir.path}")
    private String destDirectoryPath;

    @Autowired
    private EntityManagerFactory entityManagerFactory;

    @Bean
    public MessageSource<File> sourceDirectory() {
        FileReadingMessageSource messageSource = new FileReadingMessageSource();
        messageSource.setDirectory(new File(sourceDirectoryPath));
        messageSource.setAutoCreateDirectory(true);
        return messageSource;
    }

    @Bean
    public JpaUpdatingOutboundEndpointSpec jpaPersistHandler() {
        return Jpa.outboundAdapter(this.entityManagerFactory)
                .entityClass(Brand.class)
                .persistMode(PersistMode.PERSIST);
    }

    @Bean
    public IntegrationFlow fileMoveFlow() {
        return IntegrationFlows.from(sourceDirectory(), conf -> conf.poller(Pollers.fixedDelay(2000)))
                .filter(msg -> ((File) msg).getName().endsWith(".txt"))
                .transform(new FileToStringTransformer())
                .split(s -> s.delimiters("\n"))
                .<String, Brand>transform(name -> {
                    Brand brand = new Brand();
                    brand.setName(name);
                    return brand;
                })
                .handle(jpaPersistHandler(), ConsumerEndpointSpec::transactional)
                .get();
    }
}

Если вы используете FileWritingMessageHandler, все будет очень просто, потому что есть метод setDeleteSourceFiles, но с JpaUpdatingOutboundEndpointSpe c все не так просто.

1 Ответ

0 голосов
/ 03 августа 2020

Добавьте ExpressionEvaluatingAdvice к .handle().

В репозитории образцов - xml есть пример , но те же методы применяются с DSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...