CamelBlueprintTesting,为什么我不能覆盖这个属性占位符?

CamelBlueprintTesting, why can't I override this propertyplaceholder?

我有一个布尔标志 属性占位符,我试图在我的一个单元测试中覆盖它,但它不起作用。

<cm:property-placeholder id="id" persistent-id="persistent-id>
  <cm:default-properties>
    <cm:property name="flag" value="true" />
  </cm:default-properties>
</cm:property-placeholder>

这个标志在 bean 中使用:

<bean id="myBean" class="com.myBean">
  <property name="flag" value="${flag}" />
</bean>

我想在进行单元测试时将 属性 重写为假,所以我实现了 useOverridePropertiesWithPropertiesComponent() 方法:

@Override
protected Properties useOverridePropertiesWithPropertiesComponent() {
  Properties prop = new Properties();
  prop.put("errorQueue", "mock:error");
  prop.put("flag", false);

  return prop;

}

我的 errorQueue 属性 工作正常,错误消息将发送到 "mock:error" 但标志未被覆盖 属性。有谁知道这是为什么?

我不确定,但我认为您的价值不被接受。 Properties 的 Javadoc 指出:

The Properties class represents a persistent set of properties. The Properties can be saved to a stream or loaded from a stream. Each key and its corresponding value in the property list is a string.

您正在使用布尔值,尝试使用

prop.put("flag", "false");

通常 property-placeholder 的键值是字符串,并在运行时转换为适当的类型。

<bean>s

时,您不能执行这些覆盖

例如以下 ${flag} 100% 由 OSGi 蓝图控制:

<bean id="myBean" class="com.myBean"> <property name="flag" value="${flag}" /> </bean>

useOverridePropertiesWithPropertiesComponent 用于 Camel 属性 占位符的 Camel 属性组件,例如 Camel 使用的 {{ }} 语法。

http://camel.apache.org/using-propertyplaceholder.html