2011-06-29 4 views
4

J'essaye de faire un poller de ftp avec l'aide de l'intégration de ressort et le poller fonctionne très bien avec la configuration de xml. Maintenant, je voudrais être en mesure de définir dynamiquement certaines propriétés de l'interrogateur comme l'expression cron ou le taux d'interrogation pour le rendre configurable par le code java et le lier à une interface web.Intégration printanière: remplacer dynamiquement la propriété bean configurée par xml?

J'ai vu beaucoup de sujets autour du sujet mais rien de vraiment clair pour le faire.
Existe-t-il une façon classique de faire cela?
Peut-il être fait avec SpeL?

Ma déclaration poller de haricots en XML est la suivante:

<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

une explication de ce vote serait grandement appréciée. – Sephy

+0

mon c'est une erreur de quelqu'un – Ralph

Répondre

1

Je ne suis pas sûr qu'il ya assez de place ici pour une réponse solide, mais en supposant que le Poller ftp est défini et géré dans le récipient de ressort, et en supposant qu'il y ait des accesseurs appropriés pour modifier ses propriétés ... que vous serez capable de changer son réglage comme vous le feriez pour n'importe quel autre objet.

D'abord, vous devez obtenir une référence de l'objet géré spring, vous pouvez le faire en demandant à l'une de vos classes d'implémenter ApplicationContextAware, exposant ainsi le contexte Spring.

Ensuite, il suffit de récupérer le bean du contexte et de mettre à jour sa propriété.

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

} 
Questions connexes