Интеграция Spring: динамически заменять настроенное свойство bean-компонента xml? - PullRequest
4 голосов
/ 29 июня 2011

Я пытаюсь создать FTP-поллер с помощью интеграции с Spring, и поллер прекрасно работает с конфигурацией xml. Теперь я хотел бы иметь возможность динамически устанавливать некоторые свойства опроса, такие как выражение cron или частота опроса, чтобы сделать его настраиваемым с помощью кода Java и связать его с веб-интерфейсом.

Я видел много тем на эту тему, но на самом деле ничего не понятно.
Есть ли классический способ сделать это?
Можно ли это сделать с помощью SpeL?

Мое объявление компонента bean в XML выглядит следующим образом:

<int-ftp:inbound-channel-adapter id="ftpInbound"
    channel="ftpChannel" session-factory="ftpClientFactory"
    filename-regex=".*\.tmp$" auto-create-local-directory="true"
    delete-remote-files="false" remote-directory="/cft-polling" local-directory="file:target/ftp-output" >
    <int:poller fixed-rate="1000" />
</int-ftp:inbound-channel-adapter>

<int:channel id="ftpChannel">
    <int:queue />
</int:channel>

1 Ответ

1 голос
/ 09 декабря 2011

Я не уверен, что здесь достаточно для четкого ответа, но при условии, что ftp-поллер определен и управляется в контейнере пружины, и при условии, что есть надлежащие средства доступа для изменения его свойств ... что вы сможетечтобы изменить его настройку так же, как любой другой объект.

Сначала вам нужно получить ссылку на управляемый объект Spring, вы можете сделать это, если один из ваших классов реализует ApplicationContextAware, тем самым предоставляя контекст Spring.

Тогда нужно просто получить компонент из контекста и обновить его свойство.

public class MyManagedClass implements ApplicationContextAware {
   private ApplicationContext springContext;

   public void changeBeansProperty(){
      MyFtpPoller poller = (MyFtpPoller) springContext.getBean("ftpInbound");
      poller.setCronExpress("12 12 * * * *");
   }

   public void setApplicationContext(ApplicationContext applicationContext) {
       this.springContext = applicationContext;
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...