从 PropertyPlaceholderConfigurer 加载属性到系统属性

Load properties from PropertyPlaceholderConfigurer to System properties

我正在使用 spring 4.1.0.RELEASE 和 log4j 1.2.14。 我使用下一行来加载和解析属性:

<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>

在 log4j 配置中我有:

<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>

${properties.file} 我有 'instance' 属性。所以我 运行 我的代码的几个实例,并希望它们中的每一个都登录到单独的文件中。但我看到,即使我启动第一个,它也会登录到 myfile-.log,文件名中没有实例 属性 值。发生这种情况是因为 EncryptablePropertyPlaceholderConfigurer 加载的属性未加载到系统属性。我该如何改变它?我应该怎么做才能使占位符配置器将属性加载到系统中。 谢谢

<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>