【问题标题】:Load properties from PropertyPlaceholderConfigurer to System properties将属性从 PropertyPlaceholderConfigurer 加载到系统属性
【发布时间】:2016-06-01 22:46:42
【问题描述】:

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

【问题讨论】:

  • 您是否使用 Maven 来构建和打包您的应用程序?
  • @aribeiro ,是的,我使用 Maven。我构建可执行 jar,然后像 java -jar -Dproperties.file=file:/path/to/myfile.properties -Dlog4j.configuration=file:/path/to/log4j.xml program.jar 一样运行它
  • 您可以在应用程序的打包目标期间使用 Maven 的资源过滤机制,以便将 ${instance} 占位符替换为您想要的值。因此,您将不再需要 properties 文件。
  • 请在此处检查接受的答案[stackoverflow.com/questions/35173187/…。这可能会有所帮助
  • 一般的问题是,log4j 自己加载它的配置文件(没有 spring),因此 Springs PlaceholderConfigurer 对你的 log4j 配置没有影响。

标签: java spring properties log4j properties-file


【解决方案1】:
<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2018-07-21
    • 2016-04-24
    • 2011-10-04
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多