如何使用spring动态加载java中的配置

时间:2016-02-26 09:59:41

标签: java spring

我正在java编写一个带有spring的WebApp后端。在代码中有很多神奇的数字。有没有办法把它放在config中,以便在不重新启动整个应用程序的情况下,此配置中的任何更改都会生效?

3 个答案:

答案 0 :(得分:1)

当java进程启动时,它会加载spring上下文,一旦加载了spring上下文,它只会读取一次属性文件,所以如果你要更改任何属性,你必须重新启动你的应用程序才有好处。

或者您可以使用Apache Commons Configuration项目中的PropertiesConfiguration替换java.util.Properties。它支持自动重新加载,通过检测文件何时更改,或通过JMX触发。

另一种替代方法是将所有prop变量保存在数据库中并定期刷新引用缓存,这样您就不必重新启动应用程序并可以从数据库中动态更改属性。

答案 1 :(得分:0)

您可以通过以下步骤调用配置文件:

  1. 对调用的类使用 @Configuration 注释 配置文件。
  2. 要在类上方声明的另一个注释,用于定义配置文件的路径 @PropertySource({" URL / PATH_OF_THE_CONFIG_FILE"})
  3. @Value(" $ {PROPERTY_KEY}")注释位于变量上方,其中需要指定与property_key对应的值。
  4. 调用类的相同配置中的以下bean。

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    
  5. 确保 @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;

 }