使用Spring配置文件设置系统属性

配置:

Spring 2.5,Junit 4,Log4j

从系统属性中指定log4j文件位置

${log.location}

在运行时,使用-D java选项设置系统属性。一切都很好。

问题/我需要什么:

在单元测试时,未设置系统属性,并且文件位置未解析。

App使用Spring,想简单地配置Spring以设置系统属性。

更多信息:

要求仅用于配置。无法引入新的Java代码或IDE中的条目。理想情况下,Spring的属性配置实现之一可以解决这个问题-我只是找不到合适的组合。

这个想法很接近,但是需要添加Java代码:

Spring SystemPropertyInitializingBean

有什么帮助吗?任何想法表示赞赏。

回答:

你可以结合使用两个MethodInvokingFactoryBeans来实现

创建一个访问System.getProperties的内部bean,并在内部bean获取的属性上调用putAll的外部bean:

<bean

class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">

<property

name="targetObject">

<!-- System.getProperties() -->

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

<!-- The new Properties -->

<util:properties>

<prop

key="my.key">myvalue</prop>

<prop

key="my.key2">myvalue2</prop>

<prop

key="my.key3">myvalue3</prop>

</util:properties>

</property>

</bean>

(你当然可以只使用一个bean并以System.setProperties()为目标,但是随后你将替换现有属性,这不是一个好主意。

无论如何,这是我的小测试方法:

public static void main(final String[] args) {

new ClassPathXmlApplicationContext("classpath:beans.xml");

System.out.println("my.key: "+System.getProperty("my.key"));

System.out.println("my.key2: "+System.getProperty("my.key2"));

System.out.println("my.key3: "+System.getProperty("my.key3"));

// to test that we're not overwriting existing properties

System.out.println("java.io.tmpdir: "+System.getProperty("java.io.tmpdir"));

}

这是输出:

my.key: myvalue

my.key2: myvalue2

my.key3: myvalue3

java.io.tmpdir: C:\DOKUME~1\SEANFL~1\LOKALE~1\Temp\

以上是 使用Spring配置文件设置系统属性 的全部内容, 来源链接: utcz.com/qa/432025.html

回到顶部