我正在java
编写一个带有spring的WebApp后端。在代码中有很多神奇的数字。有没有办法把它放在config
中,以便在不重新启动整个应用程序的情况下,此配置中的任何更改都会生效?
答案 0 :(得分:1)
当java进程启动时,它会加载spring上下文,一旦加载了spring上下文,它只会读取一次属性文件,所以如果你要更改任何属性,你必须重新启动你的应用程序才有好处。
或者您可以使用Apache Commons Configuration项目中的PropertiesConfiguration替换java.util.Properties。它支持自动重新加载,通过检测文件何时更改,或通过JMX触发。
另一种替代方法是将所有prop变量保存在数据库中并定期刷新引用缓存,这样您就不必重新启动应用程序并可以从数据库中动态更改属性。
答案 1 :(得分:0)
您可以通过以下步骤调用配置文件:
调用类的相同配置中的以下bean。
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
确保 @ComponentScan 涵盖配置文件所在的文件夹
答案 2 :(得分:0)
以下是配置它的方法
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemalocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!--To load properties file -->
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:META-INF/*-config.properties">
</property></bean>
<bean id="createCustomer" class="com.example.Customer">
<property name="propertyToInject" value="${example.propertyNameUnderPropertyFile}">
</beans>
您也可以直接在java文件中引用它
public class Customer {
@Value("${example.propertyNameUnderPropertyFile}")
private String attr;
}