有人可以解释一下这两个属性之间的区别吗?
@Override
public void setUp() throws Exception {
context = new DefaultCamelContext(new SimpleRegistry());
template = context.createProducerTemplate();
context.addRoutes(new RouteBuilder() {
public void configure() throws Exception {
PropertiesComponent prop = context.getComponent(
"properties", PropertiesComponent.class);
prop.setLocation("classpath:test.properties");
from("direct:start")
.log("Property: ${properties:a}")
.process(new Processor() {
@Override
public void process(Exchange ex) throws Exception {
String a = ex.getProperty("a", String.class);
LOG.info("Property: " + a);
}
})
;
}
});
context.getShutdownStrategy().setTimeout(1);
context.start();
}
@Test
public void testRoute() throws Exception {
template.sendBody("direct:start", null);
}
属性文件(test.properties
):
a = a
输出:
2015-09-03 14:38:01,740 | INFO | route1 | Property: a
2015-09-03 14:38:01,743 | INFO | CamelTest2 | Property: null
第一行来自.log("${properties:a}")
,因此可以找到它。但是,String a = ex.getProperty("a", String.class);
不能。两者都是属性并且指向相同的属性,对吧?
有什么区别,我怎样才能在处理器中找到属性?
答案 0 :(得分:4)
Exchange
仅在客户端接收请求时创建。这意味着您的Camel处理器只能访问Message
而不能访问外部资源的属性。
Exchange的属性是Message的元信息。按照文档,
Exchange还将整个生命周期中的元数据存储为 可以使用各种
getProperty(String)
方法访问的属性。setProperty(String, Object)
用于存储属性。对于 例如,您可以使用它来存储安全性,SLA相关数据或任何 在整个处理过程中被视为有用的其他信息。