Spring EL File.renameTo在安装的目录上不起作用

时间:2020-02-11 08:54:35

标签: spring spring-integration spring-el

我让这个bean在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 :(得分:0)

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

您可以使用T(java.io.File).toPath()File转换为Path