Я использую дату в пути в Camel:
fileName=${date:now:dd-MM-yyyy}
но теперь мне нужно - 1 день. Возможно ли это?
Я использую дату в пути в Camel:
fileName=${date:now:dd-MM-yyyy}
но теперь мне нужно - 1 день. Возможно ли это?
Ну, не прямо. Дата: объект на простом языке может захватывать только текущее время (или некоторое значение времени, которое вы разместили внутри заголовка), что вы могли бы сделать в java или аналогичном.
Но вы также можете сделать это. Создайте класс:
public class YesterdayBean{
public String getYesterday(){
Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
cal.add(Calendar.DATE, -1);
return dateFormat.format(cal.getTime());
}
}
Подключите его к вашему верблюду (или spring, если вы используете этот) реестр как bean. Если вы не знаете, как это сделать, найдите registry и раздел "Использование" bean.
Скажем, вы назвали bean "вчера" в реестре, с spring:
<bean id="yesterday" class="some.package.YesterdayBean"/>
то просто используйте его с файловым компонентом.
.to("file:fo/bar?fileName=${bean:yesterday}")
Если это всего лишь одно место, которое вам нужно, и вы используете Java DSL, вы также можете просто создать дату с помощью java-процессора и поместить его в заголовок.
Вот так:
from("file:somewhere")
.process(new Processor(){
public void process(Exchange ex){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
ex.getIn().setHeader("yesterday",cal.getTime());
}
})
.to("file:target?fileName=${date:header.yesterday:dd-MM-yyyy}");
}
Мне было любопытно об этом и попробовал какую-то помощь из списка рассылки верблюдов. Фактически вы можете делать то, что вы запрашиваете, с помощью встроенных скриптов, таких как groovy. См. здесь.
Я получил это, чтобы работать для меня:
<camelContext id="contextname">
<route id="routename">
<from uri="file://\temp\?fileName=#myGroovyExp" />
<split>
<tokenize token="(?=MSH\|)" regex="true" />
<to uri="bean:filePickupByDateTest?method=test" />
</split>
</route>
</camelContext>
<spring:bean id="myGroovyExp" class="org.apache.camel.model.language.GroovyExpression">
<spring:constructor-arg index="0" value="new Date().previous().format('MMddyy') + 'pa'" />
</spring:bean>
Где мои имена файлов вчера: MMddyypa
Вам просто нужно сменить тело script на:
new Date().previous().format('dd-MM-yyyy')
Вам нужен верблюд groovy (или любой другой script lang, который вы используете) на своем пути, конечно.
Решение с использованием фильтра имен файлов:
Создайте класс, который реализует файл org.apache.camel.component.file.GenericFileFilter и реализует метод accept для подтверждения имени файла
public class CustomFileName implements GenericFileFilter {
public boolean accept(GenericFile file) {
Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
cal.add(Calendar.DATE, -1);
return file.getFileName().equals ("FILENAME_PREFIX"+dateFormat.format(cal.getTime()) + ".EXT");
}
}
В Spring config
<bean id="customFileFilter" class="com.sample.proj.util.CustomFileName"/>
и
<route>
<description>Route for copying file from one location to another with custom file name filter</description>
<from uri="file://C:\Source?filter=#customFileFilter" />
<to uri="file://C:\Destination" />
</route>
fileName=${date:now-24h:dd-MM-yyyy}