Spring EL File.renameTo не работает на смонтированных каталогах - PullRequest
0 голосов
/ 11 февраля 2020

Этот бин отлично работает на linux и windows, но не перемещает файлы, когда источник находится в смонтированной файловой системе (например, на сетевом диске). Я знаю, что File.renameTo не способен сделать такой ход, вместо этого следует выполнить копирование и удаление, но как это сделать в SpelExpression? Я также попытался зарегистрировать пользовательский метод, но он не работал. Есть предложения?

@Bean
TransactionSynchronizationFactory transactionSynchronizationFactory() {
    ExpressionParser parser = new SpelExpressionParser();
    ExpressionEvaluatingTransactionSynchronizationProcessor syncProcessor = new ExpressionEvaluatingTransactionSynchronizationProcessor();
    syncProcessor.setBeanFactory(applicationContext.getAutowireCapableBeanFactory());
    syncProcessor.setAfterCommitExpression(parser.parseExpression(
            "payload.renameTo(new java.io.File(@inboundProcessedDirectory.path " +
                    " + T(java.io.File).separator + payload.name))"));
    syncProcessor.setAfterRollbackExpression(parser.parseExpression(
            "payload.renameTo(new java.io.File(@inboundFailedDirectory.path " +
                    " + T(java.io.File).separator + payload.name))"));
    return new DefaultTransactionSynchronizationFactory(syncProcessor);
}

1 Ответ

0 голосов
/ 11 февраля 2020

T(java.nio.file.Files).move(<oldPath>, <newPath>)

Вы можете использовать T(java.io.File).toPath() для преобразования File в Path.

...