如何在运行时Spring 3 MVC上设置系统属性

时间:2014-02-25 10:07:55

标签: java spring spring-mvc ssl

目前我们有以下bean定义来设置javax.net.ssl.trustStore

<bean id="trustStore" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" value="#{@systemProperties}" />
    <property name="targetMethod" value="putAll" />
    <property name="arguments">
        <props>
            <prop key="javax.net.ssl.trustStore">../path_to/cacerts</prop>
            <prop key="javax.net.ssl.trustStorePassword">changeit</prop>
        </props>
    </property>
</bean>

是否可以在运行时设置javax.net.ssl.trustStore?
我知道有类似的内容:

System.setProperty("javax.net.ssl.trustStore", "D:/cacerts"); 

System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

我通过此实现获得的问题是,当对“cacerts”文件进行更改时,除非重新启动应用程序,否则此类更改不会反映出来。我想知道是否有办法动态地做到这一点。

我们有一个改变'cacerts'的功能。

我试过调查此链接,但我很难理解逻辑。

http://java.dzone.com/articles/dynamic-property-management

PS:我春天还是新人。

干杯!

1 个答案:

答案 0 :(得分:1)

为属性创建自定义FactoryBean

public class SysConfigPropertiesFactoryBean implements FactoryBean<Properties> {

    public final boolean isSingleton() {
        return true;
    }

    public Class<Properties> getObjectType() {
        return Properties.class;
    }

    public final Properties getObject() {
        // filtering or any other operation here
        return System.getProperties();
    }

}

定义属性bean:

<bean id="sysConfig" class="xxx.SysConfigPropertiesFactoryBean"/>

你可以使用它:

xml中的

<bean class="...">
   <property name="targetObject" value="#{sysConfig.property}" />
</bean>

使用单一值:

 @Value("#{sysConfig.propertyName}")
 private String propertyValue;
完整属性对象的

@Autowire

 @Autowired
 @Qualifier("sysConfig")
 private java.util.Properties systemProperties;