【问题标题】:How to set System Properties on run time Spring 3 MVC如何在运行时设置系统属性 Spring 3 MVC
【发布时间】:2014-02-28 17:03:03
【问题描述】:

目前我们有下面的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:我还是春天的新手。

干杯!

【问题讨论】:

    标签: java spring spring-mvc ssl


    【解决方案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 用于完整的 Properties 对象:

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

    【讨论】:

    • 您好 jw23。谢谢回复。我想知道,我将如何在我的代码中使用这个?例如,在我的 @Controller 类上?我可以直接说吗??: System.setProperty("javax.net.ssl.trustStore","../new_path/cacerts");或者你的意思是,一旦调用 System.setProperty,这样的属性值在运行时真的会改变?请阐述。干杯! :)
    • ,它们在启动时进行评估。
    • 这是否意味着它不可能在运行时进行更改?我在启动时有这个工作。我也需要在运行时这样做。谢谢
    • 每次使用都可以通过读取system properties的值来实现。
    • 您好 jw23。你能发布一个链接或代码sn-p来实现这样的实现吗?如果可以的话,我将不胜感激。干杯! :)
    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 2011-07-08
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2011-11-03
    • 2013-07-21
    相关资源
    最近更新 更多