使用Spring集成文件进行自定义文件重命名

使用Spring集成文件进行自定义文件重命名,spring,spring-integration,Spring,Spring Integration,我想在使用自定义重命名(例如字符串、时间戳等)将文件从一个文件夹移动到另一个文件夹时添加重命名功能 阅读后,我可以重命名如下: @Bean @ServiceActivator(inputChannel = FILE_CHANNEL_SOURCE) public MessageHandler moveFiles() { FileWritingMessageHandler handler = new FileWritingMessageHandler(new File(processingD

我想在使用自定义重命名(例如字符串、时间戳等)将文件从一个文件夹移动到另一个文件夹时添加重命名功能

阅读后,我可以重命名如下:

@Bean
@ServiceActivator(inputChannel = FILE_CHANNEL_SOURCE)
public MessageHandler moveFiles() {
    FileWritingMessageHandler handler = new FileWritingMessageHandler(new File(processingDir));
    handler.setFileExistsMode(FileExistsMode.FAIL);
    handler.setDeleteSourceFiles(true);
    handler.setExpectReply(false);
    handler.setFileNameGenerator(processingFileNameGenerator());
    return handler;
}

@Bean
public DefaultFileNameGenerator processingFileNameGenerator() {
    DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator();
    defaultFileNameGenerator.setExpression("payload.name + '.processing'");
    return defaultFileNameGenerator;
}
但我想把它改名为:

@Bean
public DefaultFileNameGenerator processingFileNameGenerator() {
    DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator();

    String timestamp = String.valueOf(System.currentTimeMillis()); // Or any custom String here

    defaultFileNameGenerator.setExpression("payload.name" + timestamp);
    return defaultFileNameGenerator;
}

但是DefaultFileNameGenerator无法处理这个“表达式”,那么我们怎么做呢?

我今天实际上找到了答案,我希望您能发现这段代码对任何试图实现同样目标的人都有用

@Bean
public DefaultFileNameGenerator processingFileNameGenerator() {
    DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator();

    String timestamp = String.valueOf(System.currentTimeMillis());
    String expression = fileHelper.toExpression("payload.name + '.{}'", timestamp);

    defaultFileNameGenerator.setExpression(expression);
    return defaultFileNameGenerator;
}
FileHelper.class:

public class FileHelper {
    public String toExpression(String message, String... params){
        return MessageFormatter.arrayFormat(message, params).getMessage();
    }
}