ThreadPoolExecutor splittingPool = new ThreadPoolExecutor( 1, 5, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue(10)); splittingPool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); from("file:D:/test/in?noop=true") .log("Begin splitting") .split(body().tokenize("")) .parallelProcessing() .executorService(splittingPool) .streaming() .convertBodyTo(String.class) .process(trxSplittingProc) .choice() .when(header("groupId").isNotEqualTo("EOF")) .to("file:D:/test/out?fileName=${header.groupId}-D-${header.startProcessingTime}.txt&fileExist=Append") .otherwise() .log("End of file reached") .end() .end() .bean(trxSplittingProc, "reinitilize");