2014-12-07 6 views
0

В запущенном приложении весны можно ли отслеживать папку, в которой я мог бы добавить больше файла конфигурации, в котором определено больше компонентов? Я не хочу останавливать приложение, но хочу добавить в него больше бобов, поэтому я собираюсь создать папку, а затем поместить в эту папку определения bean и позволить весне забрать ее и инициализировать компоненты. Я задаюсь вопросом, является ли это выполнимо или нетКак динамически загружать файл configuraiton весной

+0

Почему вы даже хотите это сделать? В большинстве случаев изменение определений bean также требует развертывания (из-за изменений кода) ... – home

+0

Не изменяйте определение bean-компонента, но добавьте больше определения. Я просто хочу добавить файл jar, пусть весна поднимет его, а затем позволит ему выбрать конфигурацию, указывающую на новый bean-компонент, определенный в файле jar. Является ли это возможным? –

+0

@ DanielWu Весной есть класс 'AbstractRefreshableApplicationContext', и у него есть метод loadBeanDefinitions ', поэтому, возможно, это был бы хороший способ проверить его. Вы могли бы принудительно выполнить «refresh()» в контексте, а затем «loadBeanDefinitions» будет вызван ... но это длинный снимок. –

ответ

1

Вы должны были бы две вещи

  1. Файл наблюдающий, чтобы следить за изменениями файловой системы - JDK7 обеспечивает way, чтобы сделать это.

  2. Обновить контекст приложения - Вы можете использовать метод refresh одного из AbstractRefreshableApplicationContext класса: он не будет освежить ранее инстанцированы бобы, но следующий вызов от контекста будет возвращать обновленные бобы.

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 
Смежные вопросы