2011-06-29 172 views
4

我試圖做一個ftp輪詢與Spring集成的幫助和輪詢工程與XML配置很好。現在我希望能夠動態設置輪詢器的某些屬性,如cron-expression或輪詢速率,以便通過java代碼進行配置並將其鏈接到Web界面。Spring集成:動態替換xml配置的bean屬性?

我已經看到了很多圍繞這個問題的話題,但沒有真正清楚這樣做。
有沒有一個經典的方法呢?
可以用SpeL來完成嗎?在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> 
+0

對此投票的一些解釋將不勝感激。 – Sephy

+0

我的這是一個人的錯誤 – Ralph

回答

1

我不知道有足夠的在這裏了堅實的答案,但假設FTP輪詢定義和管理Spring容器,並假設有適當的accessore來修改它的屬性......你將能夠改變它的設置,就像你對任何其他對象一樣。

首先,您必須獲得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; 
    } 

}