覆盖骆驼属性:JVM-EJB

时间:2019-02-15 14:40:32

标签: java apache-camel

当我的骆驼服务在jboss保险丝上启动时,它正在读取这样的属性:

import org.apache.camel.PropertyInject;

@PropertyInject("my.value")
private String myValue;

我想在骆驼服务旁边部署一个小型EJB,以便在启动时更新此属性,就像这样:

@Singleton
@Startup
public class PropertyOverrideEjb {

    @PostConstruct
    public void init() {

        // TODO:: update some runtime properties

    }

}

到目前为止,我已经尝试在init()方法中做几件事:

final String myVal = System.getProperty("my.value");
System.out.println("#### it is:: " + myVal);

但是sysout显示为null。然后,我尝试使用属性文件名作为标题来读取它,例如:

final String myVal = System.getProperty("property_filename_in_jboss_my.value");
System.out.println("#### it is:: " + myVal);

但是我也看到一个空响应。

然后我看了Camel notes,看到了这个注释块:

  

自Camel 2.5起可用   可以在运行时使用JVM系统属性来覆盖属性值,而无需重新启动应用程序以获取更改。也可以通过在命令行中创建一个JVM System属性来实现此目的,该属性与其用新值替换的属性同名。

     

示例:

     

javaPropertiesComponent pc = context.getComponent(“ properties”,PropertiesComponent.class); pc.setCache(false); System.setProperty(“ cool.end”,“ mock:override”); System.setProperty(“ cool.result”,“ override”); context.addRoutes(new RouteBuilder(){@Override public void configure()抛出异常{from(“ direct:start”)。to(“ properties:cool.end”); from(“ direct:foo”)。to( “ properties:mock:{{cool.result}}”);}}); context.start(); getMockEndpoint(“ mock:override”)。expectedMessageCount(2); template.sendBody(“ direct:start”,“ Hello World”); template.sendBody(“ direct:foo”,“ Hello Foo”); System.clearProperty(“ cool.end”); System.clearProperty(“ cool.result”); assertMockEndpointsSatisfied();

但是,他们提出的解决方案似乎并不完整,因为我不确定如何将CamelContext注入到 not 部分的EJB中。同样可部署。

0 个答案:

没有答案