java - 如何在 Apache Camel 中窃听时检查文件是否存在

标签 java file-io apache-camel

我有一个用 Apache Camel 编写的项目,其中我从一个路由获取消息并将其发送到另一路由进行窃听:

from("URI").bean(random1)
.wireTap("direct:wiretap")
.recipientList.method(random2, "random2Method");

from("direct:wiretap").routeId("WireTap")
.setProperty("filename", dynamicValueExpression)
.to("file://log-directory-name?fileName=/${date:now:yyyMMdd}/property[filename]")

这段代码工作得非常好,并且成功窃听文件。

这里的问题是,如果有另一个文件具有相同的文件名,则此代码会覆盖该文件。我想要实现的是检查文件是否已经存在,如果存在,则重命名当前文件(而不是现有文件),然后窃听它。

我检查了Camel文档,发现我认为我可能会使用诸如fileExist=Move属性和自定义文件策略之类的东西(我在这里可能是错的)。但我不确定它到底是如何工作的。

所以我的问题是:

  1. 我真的有可能实现我想要实现的目标吗?
  2. 如果是,有人可以告诉我怎么做吗?

最佳答案

可能有几种方法可以做到这一点。其中之一是使用一个处理器,该处理器使用您的动态属性来计算文件名:

from("direct:wiretap")
    .routeId("WireTap")
    .process(e -> {
        String fileName = (String) e.getProperty("filename");
        if (new File(fileName).exists()) {
            //Compute alternative name
            e.getIn().setHeader("CamelFileName", 
                                fileName + UUID.randomUUID().toString());
        } else {
            e.getIn().setHeader("CamelFileName", fileName);
        }
    })
    .to("file://log-directory-name");

关于java - 如何在 Apache Camel 中窃听时检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59890532/

相关文章:

java - 使用 Spring 在 JSP 中显示图像

c - 导致程序崩溃的结构

java - 具有时间间隔的远程路径观察器/查找

java - 如何减少 Java Swing BasictabbedPaneUI 实现中的 textRect 矩形?

java - 删除二叉树——设计建议

c# - 编程语言可以成为平台的一部分吗? (C# 和 Java 相关)

Java 保存/打开文件对象

java - Apache Camel getbody 作为自定义类

java - Apache Camel - Spring DSL - 将字符串参数传递给 bean 方法

用于检查 Apache Camel XML 中字符串的 JSONPath 表达式