Это не идеальное решение, но вы можете создать боб Camel с некоторым состоянием, которое на некоторое время запоминает, какие файлы прошли, и соответствующим образом нумерует их. Я предполагаю, что файлы, которые приходят через, имеют уникальные имена с течением времени.
Код боба:
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Bean used to change the name of an output file with a counter.
*/
public class NameChangeBean {
private static final Pattern NORMAL_FILE_PATTERN = Pattern.compile("(.+)(\\..+)");
private Map<String, Integer> counter = new WeakHashMap<>();
public void changeName(Exchange exchange) {
Message in = exchange.getIn();
String fileName = (String) in.getHeader(Exchange.FILE_NAME);
Message out = exchange.getOut();
out.setHeaders(in.getHeaders());
if (fileName != null) {
// Increase count by one or start at one
Integer newNumber = counter.merge(fileName, 1, Integer::sum);
Matcher matcher = NORMAL_FILE_PATTERN.matcher(fileName);
if (matcher.matches()) {
out.setHeader(Exchange.FILE_NAME, matcher.replaceFirst("$1-" + newNumber + "$2"));
} else {
out.setHeader(Exchange.FILE_NAME, String.format("%s-%d", fileName, counter.merge(fileName, 1, Integer::sum)));
}
}
out.setBody(in.getBody());
}
}
Тогда вы можете просто использовать бин в своем маршруте следующим образом:
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;
public class FileWriteChangeNameRoute {
public static void main(String[] args) throws Exception {
Main main = new Main();
System.out.println(javax.jms.ConnectionFactory.class);
main.addRouteBuilder(new RouteBuilder() {
public void configure() {
from("file://D:/dev/playground/camel-activemq/src/data")
.bean(new NameChangeBean(), "changeName")
.to("file://D:/dev/playground/camel-activemq/src/data_out");
}
});
main.run();
}
}
Это приведет к повторению имен файлов с номерами версий файлов, например:
input.xsd-1.xml
input.xsd-2.xml
input.xsd-3.xml