Ich habe eine Feder Batch-Anwendung, die aus der Datei liest, macht einige Verarbeitung und schließlich einen benutzerdefinierten Ausgang schreiben. Dies alles geschieht in einem Schritt. Im nächsten Schritt habe ich ein Tasklet, das die Eingabedateien archiviert (in einen anderen Ordner verschieben). Diese Anwendung funktioniert gut. Aber, jetzt habe ich eine Anforderung zu sftp Ausgabedateien auf einem Remote-Server, wo sie weiterverarbeitet werden. Ich habe einen Weg zu sftp mit Feder-Integration, wo ich einen Eingangskanal erstellt, die zu Outbound-Channel-Adapter führt. Ich lege meine Dateien als Nutzlast in die Nachricht und sende Nachrichten an den Kanal. Das einzige Problem, das ich hier sehe, ist, dass ich jedes Mal, wenn ich den Kontext bekomme, die Federkonfigurationsdatei laden muss, was eine Art hackischer Weg scheint, die Aufgabe zu erledigen. Kennt irgendjemand irgendeine Weise, SI mit SB zu integrieren.mit Feder Integration mit Feder Batch
Lassen Sie mich wissen, wenn Sie meine Konfig sehen möchten ... Vielen Dank im Voraus!
Code den gleichen App-Kontext zuzugreifen, ohne die Feder Config wieder geladen
public class AppContextProvider implements ApplicationContextAware{
private static ApplicationContext ctx;
public ApplicationContext getApplicationContext() {
return ctx;
}
public void setApplicationContext(ApplicationContext appContext) throws BeansException {
ctx = appContext;
}
}
Code, um die Ausgabedatei Push-Server SFTP
log.info("Starting transfer of outputFile : " + absoluteOutputFileName);
final File file = new File(absoluteOutputFileName);
final Message<File> message = MessageBuilder.withPayload(file).build();
AppContextProvider context = new AppContextProvider();
final MessageChannel inputChannel = context.getApplicationContext().getBean("toChannel",MessageChannel.class);
inputChannel.send(message);
log.info("transfer complete for : " + absoluteOutputFileName);
Vielen Dank für Ihren Kommentar. Ich werde es durchgehen, In der Zwischenzeit habe ich einen Weg gefunden, den gleichen App-Kontext meiner Bewerbung zu bekommen. Bitte schlagen Sie vor, ob es der richtige Weg ist oder ob Sie Probleme damit haben. den Code in meiner ursprünglichen Frage hinzugefügt –
Warum erstellen Sie einen ApplicationContext pro Job, den Sie ausführen? –
Ich erstelle keinen ApplicationContext pro Job. Ich lade die Spring-Konfiguration einmal und dann für jede Datei ich den Job nacheinander aufrufen. (Ich überprüfe Ordner für verfügbare Dateien und eine Schleife) –