2014-12-07 73 views
0

在一個正在運行的春天的應用程序,它可以監視一個文件夾下,我可以把更多的配置文件,其中更多的豆被定義?我不想停止應用程序,但想要添加加載更多bean的能力,所以我正在考慮創建一個文件夾,然後將bean定義放入該文件夾,並讓spring選擇它並初始化bean。我想知道它是否是可行與否如何動態加載配置文件在春天

+0

爲什麼你甚至想這樣做嗎?在大多數情況下,更改bean定義也需要部署(由於代碼更改)... – home 2014-12-07 13:16:35

+0

不更改bean定義,但添加更多定義。我只想添加一個jar文件,讓spring選取它,然後讓它選擇一個指向jar文件中定義的新bean的配置。可能嗎? – 2014-12-07 13:23:21

+0

@DanielWu在Spring中有一個'AbstractRefreshableApplicationContext'類,它有一個方法'loadBeanDefinitions',所以也許這將是一個檢查它的好方法。你可以在上下文中執行'refresh()',然後'loadBeanDefinitions'會被調用...但這是一個很長的過程。 – 2014-12-07 16:34:52

回答

1

您將需要兩件事情

  1. 的文件觀察者來監視文件系統的變化 - JDK7提供way做到這一點。

  2. 刷新應用程序上下文 - 您可以使用AbstractRefreshableApplicationContext類之一的refresh方法:它不會刷新先前已實例豆,但上下文下一次調用將返回刷新豆。

0

您可以創建一個屬性文件並加載動態

參考下,我在我的項目已經使用代碼:

private static Properties beanProps = new Properties(); 
beanFactoryFileProps.load(AppContext.class 
        .getResourceAsStream("configFile.properties")); 
      Collection props = beanProps.values(); 
      String[] configFiles = null; 
      if (!Utils.isEmpty(props)) { 
       Object[] config = props.toArray(); 
       configFiles = new String[config.length]; 
       for (int i = 0; i < config.length; i++) { 
        configFiles[i] = (String) config[i]; 
       } 
      } 
      else 
      { 
       configFiles=new String[] {"dispatcher-servlet.xml"}; 
      } 

性文件,如下

file1=dispatcher-servlet.xml 
file2=ApplicationContext.xml 
file2=QuartzSchedulerContext.xml