Spring EL File.renameTo 无法处理挂载的目录
Spring EL File.renameTo is not working on mounted directories
我让这个 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);
}
T(java.nio.file.Files).move(<oldPath>, <newPath>)
您可以使用 T(java.io.File).toPath()
将 File
转换为 Path
。
我让这个 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);
}
T(java.nio.file.Files).move(<oldPath>, <newPath>)
您可以使用 T(java.io.File).toPath()
将 File
转换为 Path
。