Spring集成:动态替换xml配置的bean属性?

时间:2011-06-29 08:09:23

标签: spring spring-integration

我正在尝试在Spring集成的帮助下执行ftp轮询,并且轮询器在xml配置中运行良好。现在我希望能够动态设置轮询器的一些属性,如cron-expression或轮询率,以使其可由java代码配置并将其链接到Web界面。

我已经看过很多关于这个主题的话题,但没有什么可以做到这一点 有没有经典的方法呢? 可以用SpeL完成吗?

我在XML中的bean轮询器声明如下:

<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 个答案:

答案 0 :(得分:1)

我不确定这里是否有足够的答案,但假设在弹簧容器中定义和管理ftp轮询器,并假设有适当的访问权限来修改它的属性......你将能够改变它的设置就像你对任何其他物体一样。

首先,您必须获得spring托管对象的引用,您可以通过让其中一个类实现ApplicationContextAware从而公开Spring上下文来实现此目的。

然后,只需从上下文中获取bean并更新它的属性即可。

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;
   }

}