Camel 2.24.2:使用环境变量覆盖PropertiesComponent

时间:2019-11-14 13:26:42

标签: apache-camel

我正在尝试使用PropertiesComponent并读取类路径中的属性文件。我已经构建了一个独立的可执行jar,并且正在使用骆驼Main类-没有弹簧引导。

但是,我想使用环境变量覆盖这些属性之一,但是它不起作用。我可以使用-D覆盖它,但是文档表明可以使用环境变量覆盖它。

这是示例代码段

    Main main = new Main();
    main.addRouteBuilder(new HelloRoute());
    main.bind("doWork", new DoWork());
    PropertiesComponent pc = new PropertiesComponent();
    pc.setLocation("classpath:app.properties");
    main.bind("properties", pc);
    main.run();

这是属性文件

account.route.id=account_route_get
account.route.get=account_route_get_description
startup_route=false

这是我尝试使用它的路线。我试图覆盖startup_route,但无法正常工作。

       rest("/account")
            .get("/{name}")
                .consumes("application/json")
                .outType(Account.class)
                .route()
                    .id("{{account.route.id}}")
                    .description("{{account.route.get}}")
                    .autoStartup("{{startup_route}}")
                    .to("log:{{account.route.get}}?level=INFO")
                    .to("bean:doWork?method=info(${header.name})")
            .endRest()

我找到了这个CAMEL-13502,但是它使用的是不同版本的Camel,我想知道这是否也与Camel 2.24.2有关

谢谢

1 个答案:

答案 0 :(得分:1)

我猜您不想从OS环境变量中明确指出要使用该变量。

如果您确实想这样做,可以声明

.autoStartup("${env:STARTUP_ROUTE}")

但是如果您想要一个更动态的解决方案,另一种选择是创建一个

choice()

首先检查该名称的环境变量是否存在,如果不存在,则默认为属性文件中的环境变量。

.when("${env:STARTUP_ROUTE} != null")
.autoStartup("${env:STARTUP_ROUTE}")
.otherwise()
.autoStartup("{{startup_route}}")

最后,Property Component的Camel文档还指出:

您可以使用属性组件上的systemPropertiesMode和environmentVariableMode选项来控制这些模式。

当我在项目中运行示例时,我确实具有配置systemPropertiesMode的能力,但是我没有environmentVariableMode的选项,因此不确定是否这是我使用的更高版本的Camel版本的功能