2014-05-14 57 views
1

檢索所有的屬性我正在寫擴展LifecycleStrategy並在在CamelContext

onContextStart(CamelContext context) 

我需要檢索已在上下文中加載的所有屬性的bean。如果我打電話給context.getProperties(),它會返回一個lenght = 0的地圖(它接受沒有加載任何屬性),但是如果我打電話給resolvePropertyPlaceholders("{{one.of.my.properties}}")它會正確解析。有什麼方法可以檢索所有屬性鍵?

ps。我的屬性通過camel上的propertyPlaceholder加載上下文

+1

我正在嘗試幾乎相同。你有解決方案@ddelizia? – cringe

回答

-1

這些是兩個不同的東西。

context.getProperties()是您可以配置的一些選項。

的另一件事是財產佔位 http://camel.apache.org/using-propertyplaceholder.html

+1

謝謝!但是如何檢索我在駱駝環境中的屬性佔位符中聲明的所有屬性? – ddelizia

+0

propertyPlaceholder根據我所知不支持通配符。例如,獲取以某個單詞開頭的所有屬性:'{{my.word。*}}'那麼問題仍然對我開放 –

+0

構建您自己的屬性解析器並將其設置在屬性組件上,然後您可以捕獲所有查找調用和委託給實際查找的默認值 - org.apache.camel.component.properties.PropertiesParser –

1

我有同樣的問題,並做了再次讀取從上下文屬性文件的唯一方法:

PropertiesComponent pc = (PropertiesComponent) exchange 
          .getContext() 
          .getComponent("properties"); 

// Assume only one property file configured 
String location = pc.getLocations()[0]; 

Properties props = new Properties(); 
props.load(getClass() 
     .getClassLoader() 
     .getResourceAsStream(
       StringUtils.substringAfter(location, 
         ":"))); // remoove the classpath: if existing 

for (String propName : props.stringPropertyNames()) { 

    if (propName.startsWith("my.word.")) { 
     endpoints.add(props.getProperty(propName)); 
    } 
} 

我不認爲這很好,但目前我沒有別的選擇。

相關問題