为什么骆驼只移动部分数据的文件?
Why does camel move file with only partial data?
下面是我的代码:
from("quartz2:report?cron=" + cronExpression)
.routeId("jms:queue:test")
.setHeader("CURRENT_TIME", simple("${date:now:MM-dd-yyyy HH:mm:ss.S}"))
//Writing column names for report to the file
.setBody()
.simple(summaryHeaders)
.transform(body().append("\n"))
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.to("sql:" + dataSummaryQuery + "?dataSource=#dataSource")
.log(LoggingLevel.INFO, "Summary query executed")
.marshal(csvFormat)
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.log(LoggingLevel.INFO, "Report written to file")
.setBody()
.simple(fileHeaders)
.transform(body().append("\n"))
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.to("sql:" + dataExtractionQuery + "?dataSource=#dataSource")
.log(LoggingLevel.INFO, "data query executed")
.marshal(csvFormat)
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append");
直到上面的代码,一切正常,所有需要的数据都在文件中。当我尝试将文件移动到其他位置时,移动的文件只有来自上面的 dataextractionquery 的数据。以前的数据不在文件中。这里发生了什么?如何移动添加了所有数据的文件?
移动文件的代码:
from("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.to("file:" + filePath + "?fileName=temp/");
如果我不移动文件,文件中的所有数据我都有
这里发生了什么?
第二条路线正在表演
- 文件消费者每 500 毫秒扫描一次源文件(默认
delay
值为 500
)
- 文件制作者覆盖目标文件(默认
fileExist
值为Override
)
- [异步到上述步骤] 文件使用者将文件移动到相对于源目录的
.camel
子文件夹(默认 move
设置)
By default, Camel will move consumed files to the .camel sub-folder
relative to the directory where the file was consumed.
每当数据的一部分流向源时,路由会消耗它,覆盖目标文件(源中的数据),然后将其丢弃。最后,路由得到最后一部分数据并将其写入目标位置。
如何移动添加了所有数据的文件?
有一个警告(Avoid reading files currently being written by another application) and a section覆盖这个。列出一些可能的方法供您参考。
- 使用
doneFileName
(选中USING DONE FILES and WRITING DONE FILES)
- 为
delay
设置足够大的值
- 使用
readLock
- 通过
noop
停止 move
并通过 idempotentKey
(set with name and size) 控制 idempotent
行为
下面是我的代码:
from("quartz2:report?cron=" + cronExpression)
.routeId("jms:queue:test")
.setHeader("CURRENT_TIME", simple("${date:now:MM-dd-yyyy HH:mm:ss.S}"))
//Writing column names for report to the file
.setBody()
.simple(summaryHeaders)
.transform(body().append("\n"))
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.to("sql:" + dataSummaryQuery + "?dataSource=#dataSource")
.log(LoggingLevel.INFO, "Summary query executed")
.marshal(csvFormat)
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.log(LoggingLevel.INFO, "Report written to file")
.setBody()
.simple(fileHeaders)
.transform(body().append("\n"))
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.to("sql:" + dataExtractionQuery + "?dataSource=#dataSource")
.log(LoggingLevel.INFO, "data query executed")
.marshal(csvFormat)
.to("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append");
直到上面的代码,一切正常,所有需要的数据都在文件中。当我尝试将文件移动到其他位置时,移动的文件只有来自上面的 dataextractionquery 的数据。以前的数据不在文件中。这里发生了什么?如何移动添加了所有数据的文件?
移动文件的代码:
from("file:" + filePath + "?fileName="+scheduledFileName+"${date:now:MM-dd-YYYY}.csv&fileExist=append")
.to("file:" + filePath + "?fileName=temp/");
如果我不移动文件,文件中的所有数据我都有
这里发生了什么?
第二条路线正在表演
- 文件消费者每 500 毫秒扫描一次源文件(默认
delay
值为500
) - 文件制作者覆盖目标文件(默认
fileExist
值为Override
) - [异步到上述步骤] 文件使用者将文件移动到相对于源目录的
.camel
子文件夹(默认move
设置)
By default, Camel will move consumed files to the .camel sub-folder relative to the directory where the file was consumed.
每当数据的一部分流向源时,路由会消耗它,覆盖目标文件(源中的数据),然后将其丢弃。最后,路由得到最后一部分数据并将其写入目标位置。
如何移动添加了所有数据的文件?
有一个警告(Avoid reading files currently being written by another application) and a section覆盖这个。列出一些可能的方法供您参考。
- 使用
doneFileName
(选中USING DONE FILES and WRITING DONE FILES) - 为
delay
设置足够大的值
- 使用
readLock
- 通过
noop
停止move
并通过idempotentKey
(set with name and size) 控制
idempotent
行为