2014-02-25 47 views
3

目前我們有下面的bean定義設置javax.net.ssl.trustStore中如何在運行時彈簧組系統屬性3 MVC

<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

創建屬性自定義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> 
0使用

單值:

@Value("#{sysConfig.propertyName}") 
private String propertyValue; 

@Autowire完全Properties對象:

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

嗨jw23。 感謝您的回覆。 我在想,如何才能在代碼中使用這一個? 說例如,在我的@Controller類?我可以直接說嗎?: System.setProperty(「 或者你的意思是說,通過調用System.setProperty來調用System.setProperty,這樣的屬性值在運行時會真的發生改變嗎? 請說明。 乾杯! :) – Miki

+0

**沒有**,它們在啓動時進行評估。 –

+0

這是否意味着在運行時無法更改此設置? 我有這啓動工作。我需要在運行時也這樣做。 謝謝 – Miki