2013-11-21 4 views
10

ich eine Frage in Bezug auf Mule Kontext Eigenschaft Platzhalter haben, habe ich zwei Dateien wie diese ein:Mule ESB: Context-Eigenschaft Platzhalter

<context:property-placeholder location="classpath:mule-app-1.properties, file:///etc/mule/conf/mule-app-2.properties" /> 

Zum einen ist dies eine gültige Konfiguration, zweitens, welche Datei Vorrang vor der stattfinden wird andere? App1 oder App2 Datei?

-S

Antwort

8

Jede wird nacheinander geladen und überschreibt doppelte Eigenschaften von der ersten. In Ihrem Fall haben Eigenschaften, die in mule-app-2.properties definiert sind, Vorrang.

Gegen Ende von this article Ich habe beschrieben, mit dieser Methode umgebungsspezifische Konfigurationseigenschaften bereitzustellen.

2

Ja, können Sie mehrere Dateien Mule Kontexteigenschaft Platzhalter geladen durch. Die richtige Art und Weise zu tun, es ist die Eigenschaften in src/main/resources Datei zu platzieren, dieser Ordner in Classpath ist und dann so etwas wie dies angeben:

<context:property-placeholder location="mule-app-1.properties, mule-app-2.properties" /> 

Ich bin nicht sicher, warum sollte man in ihnen doppelte Eigenschaften definieren will

EDIT:

Um Reihenfolge der Laden mehrerer Dateien angeben möchten, verwenden order Attribut:

<context:property-placeholder location="mule-app-1.properties" order="1"/> 
<context:property-placeholder location="mule-app-2.properties" order="2"/> 
+0

so die Datei zuerst geladen werden würde, app-1 oder App -2? Weißt du, welches Vorrang hat? – insaneyogi

+0

Siehe meine Antwort edit –

+0

Also meine Frage ist wirklich, wenn das Order-Attribut nicht angegeben ist, und ich habe die beiden Eigenschaften Dateien Setup wird, die einen Fehler verursachen oder gibt es eine Standard-Bestellung auferlegt? Wenn ja, was ist die Standardbestellung? – insaneyogi

0

Ich bin auch auf das gleiche Szenario gestoßen. Im Folgenden ist das Ergebnis meiner praktischen Erfahrung:

  1. Wenn beide Dateien entweder im Projekt oder Server vorhanden ist, wird sowohl während des Projekts/app-Start geladen werden. Falls die Dateien nicht verfügbar sind, wird die Ausnahme (java.io.FileNotFoundException: Das System kann die angegebene Datei nicht finden) beim Ausführen der Anwendung ausgelöst.

  2. Es ist ziemlich interessant, mehrere Eigenschaftendateien zu verwenden und den Vorrang zu kennen. In diesem Fall werden beide Property-Dateien geladen und somit werden Eigenschaften, die in beiden Dateien definiert sind, während der Laufzeit geladen. Mule gibt jedoch der zuletzt deklarierten Datei immer den Vorzug, falls dieselben Eigenschaften in beiden Dateien definiert sind und ein zusätzliches Attribut wie Auftrag nicht definiert wurde.

    Für Beispiel, wenn es eine Eigenschaft "db.dbname = test_university" erklärte innen
    "mule-app-1.properties" und "db.dbname = Universität" innen „Maultier app2.properties " dann $ {db.DB-Name} innerhalb Config xml lädt „Universität“

2

Ihre Konfiguration sollte wie folgt lauten:

<context:property-placeholder location="mule-app.properties, file:C://Users//schiraboina//Desktop//123.txt"/> 

Im obigen Fall Sie versuchen, die Werte zu lesen, indem Sie '$ {key_name}'. Die Rangordnung wird 1. mule-app.properties 2. lesen Datei von einem externen Standort sein

0

Für weitere Informationen zu dieser Frage. Die Daten werden gelesen, geben die erste Präferenz für Daten in CLASSPATH, dann werden die Daten in der Datei gelesen!

0

Spring lädt Eigenschaften von jeder Ressource der Reihe nach und überschreibt Eigenschaften, wenn sie mehr als einmal gefunden werden. Auf diese Weise können Sie Standardwerte für Eigenschaften bereitstellen und diese pro Umgebung anpassen.

Für zB:

<context:property-placeholder 
    location="classpath:myapp-config.properties,classpath:myapp-config-${MULE_ENV}.properties,file:/opt/mule/conf/${MULE_ENV}/myapp-config.properties" 
    ignore-resource-not-found="true" 
    ignore-unresolvable="true" /> 

Dies ist sehr ähnlich zu dem, was Sie erwähnt haben oben und Ihre Frage zu beantworten:

  • Syntax ist völlig in Ordnung. Es wird keine Ausnahme ausgelöst
  • Mule-app-22.properties wird Vorrang vor mule-app-1.properties haben.

Siehe diesen Link für weitere Informationen: http://confluex.com/blog/integration-software-is-software/

0

By Tim Hennekey Sie dieses Beispiel für MULE mit Frühling verwenden kann:

<spring:bean id="property-placeholderInstance" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" name="Bean"> 
     <spring:property name="locations"> 
      <spring:list> 
       <spring:value>file:${mule.home}/conf/PropertyFile1.properties</spring:value> 
       <spring:value>file:${mule.home}/conf/PropertyFile2.properties</spring:value> 
      </spring:list> 
     </spring:property> 
    </spring:bean>