我正在使用spring应用程序,我的其余端点会将.csv转换为.text和.sem文件。
我可以通过创建骆驼上下文并向其添加路由来做到这一点,但是我正在使用Thread.sleep(miliseconds)来避免线程睡眠并在处理完成后停止。
getCamelContext.addRoutes(new RouteBuilder(){
public void configure(){
File folder = new File(filePath);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
if (listOfFile.isFile() && listOfFile.getName().contains(".csv")) {
from("file:" + fromRoute + listOfFile.getName()).to("file:" +
toArchiveRoute + csvArchive).unmarshal(bindy).to("file:" +
toTextRoute + txtFileName + ".txt").to("file:" + duplicateTextRoute + txtFileName + ".txt
}
});
getCamelContext.start();
Thread.sleep(5000);
getCamelContext.stop();}
有什么可以摆脱Thread.sleep(毫秒)的东西吗?我厌倦了在阅读Apache骆驼的操作时关闭了路由,但是我无法达到结果。
答案 0 :(得分:-1)
您可能正在搜索Graceful Shutdown。
在您的情况下,使用DefaultShutdownStrategy
就足够了。
某些功能取决于您的骆驼版本,例如个别关闭路线。
带有代码的示例可以在here中找到。
getCamelContext.addRoutes(new RouteBuilder(){
public void configure(){
File folder = new File(filePath);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
if (listOfFile.isFile() && listOfFile.getName().contains(".csv")) {
from("file:" + fromRoute + listOfFile.getName())
.to("file:" + toArchiveRoute + csvArchive)
.unmarshal(bindy)
.shutdownRoute(Defer) //Add this here
.to("file:" + toTextRoute + txtFileName + ".txt")
.to("file:" + duplicateTextRoute + txtFileName + ".txt
}
});
我现在无法测试,但是我很确定您必须使用Defer
作为策略,因为您正在从数组中读取文件。