Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 路由属性和exchange属性之间的差异_Java_Properties_Apache Camel - Fatal编程技术网

Java 路由属性和exchange属性之间的差异

Java 路由属性和exchange属性之间的差异,java,properties,apache-camel,Java,Properties,Apache Camel,有人能给我解释一下这两种属性的区别吗 @Override public void setUp() throws Exception { context = new DefaultCamelContext(new SimpleRegistry()); template = context.createProducerTemplate(); context.addRoutes(new RouteBuilder() { public void

有人能给我解释一下这两种属性的区别吗

@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
):

输出:

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}”)
,因此可以找到它。但是,
stringa=ex.getProperty(“a”,String.class)不能。两者都是属性并指向相同的属性,对吗?


区别是什么?如何在处理器中找到属性?

只有在客户端接收到请求时才会创建
交换。这意味着您的Camel处理器将只能访问
消息
,而不能访问来自外部资源的属性

交换的属性是消息的元信息。根据文件,

在整个生命周期内,Exchange还将元数据存储为 可以使用各种
getProperty(String)
方法访问属性。
setProperty(字符串,对象)
用于存储属性。对于 示例:您可以使用它来存储安全性、SLA相关数据或任何 在整个处理过程中被认为有用的其他信息


和附加属性-properties.a指的是属性文件中的属性。而exchangeProperty(私下指的是不推荐使用的属性)指的是交易所的属性。啊,我明白了。谢谢但是否有可能将整个属性文件添加到exchange?不完全确定。但是,如果您使用的是JavaDSL,那么您就拥有了最大的灵活性,不是吗?编写一个方法,可以使用一个简单的java属性加载属性文件:Properties Properties=。。。。。并将该属性添加到交换。应该很简单:)
2015-09-03 14:38:01,740 | INFO  | route1           | Property: a
2015-09-03 14:38:01,743 | INFO  | CamelTest2       | Property: null