首页 > 解决方案 > Spring EL File.renameTo 不适用于已安装的目录

问题描述

我让这个 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);
}

标签: springspring-integrationspring-el

解决方案


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

您可以使用T(java.io.File).toPath()将 a 转换FilePath.


推荐阅读