当前位置: 首页 > 知识库问答 >
问题:

Camel独立-PropertiesComponent的配置不能在@BeanInject的bean上工作

淳于健
2023-03-14

问题:我注意到[1]中描述的对properties组件的修改不会影响注入到bean中的配置属性。在我的例子中,我希望将PC的environmentVariableMode设置为重写(fallback是默认设置)。

虽然重写在路由中是有效的,但是bean被注入了原始的属性值。

Application.properties中的属性“hi”被设置为“hello”,环境变量“hi”被设置为“huhu”,当environmentVariableMode被设置为override(2)时,环境变量“hi”将重写前者。

System env var hi=Huhu
14:34:02.282 [Camel (camel-1) thread #2 - timer://foo] INFO route1 - Huhu from route
14:34:02.297 [Camel (camel-1) thread #2 - timer://foo] INFO route1 - Hello from bean
public class MyApplication {
    private MyApplication() {
    }

    public static void main(String[] args) throws Exception {
        Main main = new Main();
        main.addConfigurationClass(MyConfiguration.class);
        main.addRouteBuilder(MyRouteBuilder.class);
        main.run(args);
    }
}

public class MyConfiguration {
    @BindToRegistry
    public MyBean myBean(@PropertyInject("hi") String hi) {
        return new MyBean(hi);
    }
}

public class MyBean {
    private String hi;

    public MyBean(String hi) {
        this.hi = hi;
    }

    public String hello() {
        return hi + " from bean";
    }
}

public class MyRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        CamelContext context = getContext();
        PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
        pc.setEnvironmentVariableMode(PropertiesComponent.ENVIRONMENT_VARIABLES_MODE_OVERRIDE);  //default is FALLBACK

        System.out.println("System env var hi=" + System.getenv("hi"));

        from("timer:foo?repeatCount=1")
            .log("${properties:hi} from route")
            .bean("myBean")
            .log("${body}");
    }
}

application.properties:
hi = Hello
public class MyApplication extends Main {
    private MyApplication(String[] args) throws Exception {
        addConfigurationClass(MyConfiguration.class);
        addRouteBuilder(MyRouteBuilder.class);
        run(args);
    }

    @Override
    protected void postProcessCamelContext(CamelContext camelContext) throws Exception {
        PropertiesComponent pc = camelContext.getComponent("properties", PropertiesComponent.class);
        pc.setEnvironmentVariableMode(PropertiesComponent.ENVIRONMENT_VARIABLES_MODE_OVERRIDE);
        super.postProcessCamelContext(camelContext);
    }

    public static void main(String[] args) throws Exception {
        new MyApplication(args);
    }
}

对Camel开发的建议:将environmentVariableMode设置为默认重写而不是回退是否更有意义,尤其是在考虑容器部署时:环境变量优先于系统属性,而系统属性优先于应用程序配置(例如application.properties)?

[1]https://github.com/apache/camel/blob/master/components/camel-properties/src/main/docs/properties-component.adoc

共有1个答案

孙恩
2023-03-14

是的,最好有ENV覆盖,欢迎您登录JIRA并在github PR上工作。我们爱贡献http://camel.apache.org/support.html

我记录了一张票:https://issues.apache.org/jira/browse/camel-13502

好的,这已经被实现为默认模式,您也可以从application.properties文件等进行配置:https://github.com/apache/camel/blob/master/examples/camel-example-main/src/main/resources/application.properties#l23

 类似资料:
  • 我有一个向spark独立单节点集群提交spark作业的maven scala应用程序。提交作业时,Spark应用程序尝试使用spark-cassandra-connector访问Amazon EC2实例上托管的cassandra。连接已建立,但不返回结果。一段时间后连接器断开。如果我在本地模式下运行spark,它工作得很好。我试图创建简单的应用程序,代码如下所示: SparkContext.Sca

  • 你好,我正在尝试编写一个简单的独立java FTP程序,使用Apache Camel从FTP服务器位置下载文件到我的本地机器。当我运行is时,我看到它一直在运行,实际的文件传输并没有发生。可能是什么问题?

  • 问题内容: 我正在尝试制作一个第三方的简单的独立/摇摆应用程序,该应用程序使用hibernate模式在另一个应用程序的数据库上进行连接,所以这是我所做的: 1-使用的jar: 2- hibernate.cfg.xml(位于src文件夹中): 3- SessionFactoryHelper: 4-样本查询: 运行该应用程序时,出现以下异常: 谁能告诉我我的配置出了什么问题? 问题答案: 这个问题与H

  • 本文向大家介绍docker配置独立桥接IP的方法,包括了docker配置独立桥接IP的方法的使用技巧和注意事项,需要的朋友参考一下 使用端口映射(NAT)的方式存在一个弊端,当多个容器都需要使用某个端口时或者host主机端口与容器端口冲突时(例如,host主机搭建了80的服务,两个容器也都搭建了80的服务,那个只有1个服务可以使用本机的80端口,其他服务都要映射为其他端口) 为容器配置独立的桥接I

  • 我有一个Spring Web应用程序(内置在maven中),我用它连接到我的火花集群(4个工作人员和1个主机)和我的cassandra集群(4个节点)。应用程序启动,工作人员与主机通信,cassandra集群也在运行。然而,当我通过我的web应用程序的界面进行PCA(火花mllib)或任何其他计算(集群、皮尔逊、斯皮尔曼)时,我得到以下错误: java.lang.ClassCastExceptio

  • 为什么我们不再需要它们在集群中?netty-acceptor到底代表什么?