【问题标题】:Programatic Use Of Properties In Apache CamelApache Camel 中属性的编程使用
【发布时间】:2015-08-27 14:22:32
【问题描述】:

我正在使用 Apache Camel 开始一个项目,并希望添加一种将一些信息存储为属性的方法。大多数示例似乎使用 Spring 和 XML,但我采用 Java DSL 方式,似乎找不到如何正确执行此操作的好示例。

我从 camel-archetype-java 原型创建了一个项目,到目前为止只添加了 Quartz 和一个路由:

package com.commserv.integration;

import org.apache.camel.builder.RouteBuilder;

public class FilemakerCsvToMailroom extends RouteBuilder {

  public void configure() {

    from("file:/Volumes/Data-1/Camel?autoCreate=false&startingDirectoryMustExist=true&noop=true&scheduler=quartz2&scheduler.cron=0+*+*+*+*+?&scheduler.triggerId=EveryMinute&scheduler.triggerGroup=FilemakerCsvToMailroom") // every minute
      .routeId("FilemakerCsvToMailroom")
      .log("FilemakerCsvToMailroom triggered");

  }

}

项目代码可以在this link查看。

  • 在哪里可以将我的属性文件添加到此类项目中? (我反射性地将它添加到 src/main/resources,因为原型在那里有一个类似的 log4j 文件。)
  • 如何在不使用 XML 的情况下使其在我的项目中的上述路径中可用?我使用Property Component 吗?该链接上的文档的问题在于,简短的示例都引用了context 变量,但不确定它来自哪里。

【问题讨论】:

    标签: properties apache-camel


    【解决方案1】:

    您可以将属性文件添加到 src/main/resources。

    您可以像这样使用 Java 配置 Properties 组件:

    public void configure() {
        PropertiesComponent pc = new PropertiesComponent();
        pc.setLocation("classpath:myprop.properties");
        getContext().addComponent("properties", pc);
    
        // Will output "result1" every 5 seconds.
        from("timer:mytimer?period=5s")
        .log("{{dev.endpoint}}");
    }
    

    如果你有属性文件 src/main/resources/myprop.properties 包含

    dev.endpoint = result1
    test.endpoint = result2
    

    请注意,您可以在 RouteBuilder 中调用 getContext() 来获取正在运行的 Camel 上下文。

    【讨论】:

    • 我必须将该代码添加到每个路由 configure() 吗?有没有办法在“更高”级别加载属性?
    • 您不必将它添加到每个 configure() 中,也不必在该方法中;可以访问 Camel 上下文的任何地方都可以。 Properties 组件已注册到 Camel 上下文,因此您只需配置一次。之后,同一个 Camel 上下文中的所有路由都可以使用它。
    猜你喜欢
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多