我正在尝试使用camel和hibernate在mySQL数据库中插入json数据。 一切正常。
for (Module module : modules) {
from("timer://foo?delay=10000")
.loop(7)//not working
.to(module.getUrl() + "/api/json")
.convertBodyTo(String.class)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
int index = (Integer)exchange.getProperty("CamelLoopIndex"); // not working
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(exchange.getIn().getBody().toString());
String[] lijst = {"lastBuild", "lastCompletedBuild", "lastFailedBuild", "lastStableBuild", "lastSuccessfulBuild", "lastUnstableBuild", "lastUnsuccessfulBuild"};
JSONObject obj = new JSONObject();
JsonNode node = root.get(lijst[index]);
JsonNode build = node.get("number");
obj.put("description", lijst[index]);
obj.put("buildNumber", build);
exchange.getIn().setBody(obj.toString());
}
})
.unmarshal(moduleDetail)
.to("hibernate:be.kdg.teamf.model.ModuleDetail")
.end();
}
当我调试时,我的CamelLoopIndex保持为0,因此每次循环时它都不会递增。
欢迎所有帮助!
答案 0 :(得分:0)
在您的情况下,唯一的第一条指令在循环范围内处理:.to(module.getUrl() + "/api/json")
。您可以使用Spring DSL向循环中添加更多指令,但我不知道如何使用Java DSL明确声明循环范围。我希望专家能够更多地解释Java DSL中的循环范围。
作为一种解决方法,我建议将所有迭代指令移到单独的direct:
路径。
答案 1 :(得分:0)
我无法重现你的问题。这有效:
from("restlet:http://localhost:9010}/loop?restletMethod=get")
.loop(7)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
int index = (int) exchange.getProperty("CamelLoopIndex");
exchange.getIn().setBody("index=" + index);
}
})
.convertBodyTo(String.class)
.end();
输出:
index=6