我让这个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);
}
答案 0 :(得分:0)
T(java.nio.file.Files).move(<oldPath>, <newPath>)
您可以使用T(java.io.File).toPath()
将File
转换为Path
。