【发布时间】: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