我正在尝试使用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有关
谢谢
答案 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的选项,因此不确定是否这是我使用的更高版本的Camel版本的功能