spring - 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);
}
解决方案
T(java.nio.file.Files).move(<oldPath>, <newPath>)
您可以使用T(java.io.File).toPath()
将 a 转换File
为Path
.
推荐阅读
- git - 使用 TortoiseGit Cherry Pick 时如何在消息中包含源分支名称
- flutter - 如何在颤动中创建像这样的图像的列表按钮
- python - 还有其他方法可以创建“参数化”类吗?
- json - API 响应的 utf-8 编码问题
- amazon-web-services - Amazon File Share System FSx 上的符号链接 - Windows EC2
- linux - Print newline with as little code as possible with NASM
- matlab - Converting a cell to matrix in the presence of a for loop
- css - How to align the user name at the center of the profile pic in the same row if the text is too long
- javascript - 单击后退按钮时如何保留以前的 HTML
- ionic4 - 向用户发送电子邮件