目前我们有以下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:我春天还是新人。干杯!
答案 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;