我正在尝试根据该文件夹中存在的文件的名称和数量,将几个文件从位置A移动到同一服务器上的位置B.为了实现这一点,我使用processStrategy选项和扩展GenericFileDeleteProcessStrategy来检查batchsize。文件被移动到目的地,但我也想将处理过的文件移动到.done文件夹,将任何失败的文件移动到.failed位置。
如果我发现移动,则在与processStrategy一起使用时,移动,移动选项不起作用
下面的是我使用过的代码段。
请告诉我你的建议。我需要在备份中提供这些文件。
public class CustomTestProcessStrategy extends GenericFileDeleteProcessStrategy<File>{
static Logger logger = Logger.getLogger(CustomTestProcessStrategy.class);
@Override
public boolean begin(GenericFileOperations<File> operations,
GenericFileEndpoint<File> endpoint, Exchange exchange,
GenericFile<File> file) throws Exception {
boolean begin = super.begin(operations, endpoint, exchange, file);
if(!begin){
return false;
}
int batchSize = (int) exchange.getProperty("CamelBatchSize");
if(batchSize != 2){
logger.info("[OUT] CustomTestProcessStrategy Stopped. batch size is not met.");
return false;
}
return true;
}
的beans.xml
<bean id="testStrategy" class="com.camel.CustomTestProcessStrategy">
cameljob.properties
file.testmove.properties=?idempotent=true&processStrategy=#testStrategy&readLock=rename&readLockMinLength=0&initialDelay=10000&delay=5000&moveFailed=.failed&preMove=order&move=.done&scheduler=quartz2&scheduler.cron={{testmove.Schedule}}
folder.source=C:/readfiles/source
folder.destination =C:/readfiles/destination
驼context.xml中
<route id="FileTestMoveRoute">
<from uri="file:{{folder.source}}{{file.testmove.properties}}"/>
<bean ref="cifProcessor" method="startFinalProcess"/>
<log message="*****************Moving file ${header.CamelFileName} to the final desitnation folder *********" />
<choice>
<when>
<simple>${header.CamelFileName} regex '^.*(fileA).*(CSV|csv)'</simple>
<to uri="file:{{folder.destination}/FileA}"/>
</when>
<when>
<simple>${header.CamelFileName} regex '^.*(fileB).*(CSV|csv)'</simple>
<to uri="file:{{folder.destination}}/FileB"/>
</when>
</choice>
</when>
</route>