Wie kann ich den eingehenden Kanaladapter über Anmerkungen anstelle der regulären Konfigurationsdatei konfigurieren? Ich konnte die Bohne für die Sitzung Fabrik definieren, obwohl, wie unter:Spring Integration: Inbound Channel Adapter-Konfiguration über Anmerkungen
@Bean
public DefaultFtpSessionFactory ftpSessionFactory() {
DefaultFtpSessionFactory ftpSessionFactory = new
DefaultFtpSessionFactory();
ftpSessionFactory.setHost(host);
ftpSessionFactory.setPort(port);
ftpSessionFactory.setUsername(username);
ftpSessionFactory.setPassword(password);
return ftpSessionFactory;
}
Wie kann ich den eingehenden Kanaladapter konfigurieren, wie unter über Anmerkungen gegeben?
<int-ftp:inbound-channel-adapter id="ftpInbound"
channel="ftpChannel"
session-factory="ftpSessionFactory"
filename-pattern="*.xml"
auto-create-local-directory="true"
delete-remote-files="false"
remote-directory="/"
local-directory="ftp-inbound"
local-filter="acceptOnceFilter">
<int:poller fixed-delay="60000" max-messages-per-poll="-1">
<int:transactional synchronization-factory="syncFactory" />
</int:poller>
</int-ftp:inbound-channel-adapter>
@Artem Bilan Der modifizierte Code ist wie unter
@EnableIntegration
@Configuration
public class FtpConfiguration {
@Value("${ftp.host}")
private String host;
@Value("${ftp.port}")
private Integer port;
@Value("${ftp.username}")
private String username;
@Value("${ftp.password}")
private String password;
@Value("${ftp.fixed.delay}")
private Integer fixedDelay;
@Value("${ftp.local.directory}")
private String localDirectory;
private final static Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Bean
public SessionFactory<FTPFile> ftpSessionFactory() {
DefaultFtpSessionFactory sessionFactory = new DefaultFtpSessionFactory();
sessionFactory.setHost(host);
sessionFactory.setPort(port);
sessionFactory.setUsername(username);
sessionFactory.setPassword(password);
return new CachingSessionFactory<FTPFile>(sessionFactory);
}
@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/");
fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(value = "ftpChannel",
poller = @Poller(fixedDelay = "60000", maxMessagesPerPoll = "-1"))
public MessageSource<File> ftpMessageSource() {
FtpInboundFileSynchronizingMessageSource source =
new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
source.setLocalDirectory(new File(localDirectory));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter<File>());
return source;
}
}
Während dies ausgeführt wird, erhalte ich eine Ausnahme, wie unter Keine Bean mit dem Namen 'ftpChannel' definiert ist
Bitte beachten Sie, dass das Schlüsselwort "channel" nicht verfügbar ist, während der Inbound-Channel-Adapter mit seinem "Wert" verknüpft wird.
Ich versuchte den Kanal mit PollableChannel zu verdrahten, das ging aber auch vergebens. Es ist, als unter:
@Bean
public MessageChannel ftpChannel() {
return new PollableChannel() {
@Override
public Message<?> receive() {
return this.receive();
}
@Override
public Message<?> receive(long l) {
return null;
}
@Override
public boolean send(Message<?> message) {
return false;
}
@Override
public boolean send(Message<?> message, long l) {
return false;
}
};
}
ich einen Fehler bekam „failed Nachricht innerhalb Timeout senden: -1“ .Am ich etwas falsch noch tun?
Was ich suche ist es, alle Bohnen auf Anfrage verkabeln Inbetriebnahme, und dann einige Verfahren aussetzen Abfrage der Server, verarbeiten sie starten und sie dann von den lokalen zu löschen, so etwas wie dieses
public void startPollingTheServer() {
getPollableChannel().receive();
}
wo GetPollableChannel() gibt mir die Bohne, die ich für Polling verdrahtet hatte.
Siehe auch https://github.com/spring-projects/spring-integration/pull/1851 –
Bitte beachten dass @artem keine Benachrichtigung über die Bearbeitung Ihrer Fragen erhält - Sie müssten hier einen Kommentar hinzufügen, der besagt, dass Sie Änderungen vorgenommen haben, um eine Benachrichtigung zu erhalten. 'channel' wurde in Version 4.3.0 als Alias für' value' hinzugefügt - dies behebt auch das Problem des fehlenden Kanals. Wenn Sie aus irgendeinem Grund nicht zu 4.3 wechseln können, können Sie den Kanal explizit als '@ Bean' (' DirectChannel') definieren. –
Ich könnte dies funktioniert durch Bereitstellung eines Warteschlangen-Kanals wie unter: @Bean öffentlichen MessageChannel ftpChannel() { zurückgeben neue QueueChannel (10); } – Anish