将属性从PropertyPlaceholderConfigurer加载到系统属性

时间:2016-02-20 08:41:30

标签: java spring properties log4j properties-file

我使用的是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}我有&#39;实例&#39;属性。所以我运行了我的代码的几个实例,并希望每个实例都登录到单独的文件中。但是我看到,即使我开始第一个,它也会在文件名中没有实例属性值的情况下登录myfile-.log。发生这种情况是因为EncryptablePropertyPlaceholderConfigurer加载的属性未加载到系统属性。我该怎么改变它?我应该怎么做才能使占位符配置器加载属性到系统中。 谢谢

1 个答案:

答案 0 :(得分: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>