Laden Eigenschaften aus PropertyPlaceholderConfigurer Systemeigenschaften

Ich bin mit spring 4.1.0.RELEASE und log4j-1.2.14.
Ich nutze die nächsten Zeilen zu laden und zu beheben, Eigenschaften:

<bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer" id="propsResolver">
    <constructor-arg>
        <bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
            <property name="config">
                <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
                    <property name="algorithm" value="PBEWithMD5AndDES" />
                    <property name="passwordEnvName" value="ENC_KEY" />
                </bean>
            </property>
        </bean>
    </constructor-arg>
    <property name="location" value="${properties.file}"/>
    <property name="searchSystemEnvironment" value="true"/>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
</bean>

In der log4j-Konfiguration habe ich:

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="/path/to/myfile-${instance}.log" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%-5p] %d %c - %m%n"/>
    </layout>
</appender>

In ${properties.file} ich habe ‚instance‘ – Eigenschaft. Also ich starte mehrere Instanzen von meinem code und wollen jeden von Ihnen zu melden in separate Datei. Aber ich sehe, dass selbst, wenn ich anfange, die 1. eine Anmeldung myfile-.log ohne Instanz-Eigenschaft-Wert in Datei name. Dies geschieht, weil die Eigenschaften geladen EncryptablePropertyPlaceholderConfigurer werden nicht geladen, um System-Eigenschaften. Wie kann ich es ändern? Was sollte ich tun, um Platzhalter configurer laden Eigenschaften in das system.
Danke

  • Sind Sie mit Maven zu bauen und Verpacken Ihre Anwendung?
  • ja, ich benutze Maven. Ich Baue ausführbare jar-Datei und führen Sie es wie java -jar -Dproperties.file=file:/path/to/myfile.properties -Dlog4j.configuration=file:/path/to/log4j.xml program.jar
  • Sie könnte machen Sie von Maven resource filtering-Mechanismus, während Ihre Anwendung Paket-Ziel, um die zu ersetzen ${instance} Platzhalter für den Wert, den Sie wollen. Daher würden Sie nicht brauchen, die properties Datei nicht mehr.
  • plz-check akzeptierte Antwort hier[stackoverflow.com/questions/35173187/…. dies könnte helfen
  • Das Allgemeine problem ist, dass log4j lädt die Konfigurations-Datei durch seinen eigenen (ohne Feder), daher Springs PlaceholderConfigurer haben keine Auswirkungen auf Ihre log4j-Konfiguration.
  • danke. Ich habe versucht, zu initialisieren, log4j von spring zu verwenden: <bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" depends-on="propsResolver"> <property name="targetClass" value="org.springframework.util.Log4jConfigurer" /> <property name="targetMethod" value="initLogging" /> <property name="arguments"> <list> <value>${log4j.file}</value> </list> </property> </bean> aber es immer noch nicht beheben Eigenschaft „Instanz“
  • dies ist nicht die option für mich. Als ich sagte in Kommentar, über den ich bieten Immobilien in runtime
  • Ruzov: sorry, wieder: auch, wenn Sie beginnen, log4j mit Feder (in dieser Weise), log4j lädt die logfile direkt, also Frühjahr PlaceholderConfigurer wird nicht in Betracht gezogen, die für das Lesen der Datei. – Ich würde empfehlen, sich zu registrieren die Appender programmatische, als Sie umsetzen können, was immer Sie wollen, und kann auch lassen Sie den Frühling konfigurieren Sie Ihre Appen.

InformationsquelleAutor Vasilii Ruzov | 2016-02-20



One Reply
  1. 0
    <bean id="propertyLoader" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject">
            <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
                <property name="targetClass" value="java.lang.System"/>
                <property name="targetMethod" value="getProperties"/>
            </bean>
        </property>
        <property name="targetMethod" value="putAll"/>
        <property name="arguments">
            <util:properties location="${myfile.properties}">
            </util:properties>
        </property>
    </bean>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.