es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring SFTP polling múltiples directorios utilizando Outbound Message Gateway y IntegrationFlow.

Quiero obtener todos los archivos bajo un directorio remoto en forma periódica. Soy capaz de obtener los archivos bajo ese directorio solo una vez después del inicio de la aplicación. No estoy seguro de por qué el Poller no está funcionando. Esto está registrado en un proyecto de Spring Boot y la versión es 2.2.1.

@InboundChannelAdapter(value = “sftpReportChannel”,
poller = @Poller(fixedDelay = “5000”))
public String filesForGET(){
return “/etl/biq/autoscore/output/report-data/”;
}

@Bean
public IntegrationFlow sftpGetFlow(SessionFactory<channelsftp.lsentry> csf) {
    return IntegrationFlows.from("sftpReportChannel")
            .handle(Sftp.outboundGateway(csf,
                            AbstractRemoteFileOutboundGateway.Command.LS, "payload")
                    .options(AbstractRemoteFileOutboundGateway.Option.RECURSIVE,  AbstractRemoteFileOutboundGateway.Option.NAME_ONLY)
                    // Persistent file list filter using the server's file timestamp to detect if we've already 'seen' this file.
                    .filter(new SftpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "autoscore-meta-data")))
            .split()
            .log(message -> "file path -> "+message.getPayload())
            .handle(Sftp.outboundGateway(csf, AbstractRemoteFileOutboundGateway.Command.GET, "'/etl/biq/autoscore/output/report-data/' + payload")
                    .options(AbstractRemoteFileOutboundGateway.Option.STREAM))
            .handle(new ReportHandler()) // obtener el payload y crear el contenido del correo electrónico y enviar correo electrónico a los destinatarios
            .get();
}</channelsftp.lsentry>
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el enlace no funciona correctamente y solo recupera los archivos una vez después de iniciar la aplicación. Para solucionar este problema, necesitamos asegurarnos de que la configuración de la recuperación esté correctamente configurada.

    En el fragmento de código proporcionado, la anotación @InboundChannelAdapter se encarga de la recuperación periódica del servidor SFTP en un intervalo fijo de 5 segundos. Lee archivos del directorio remoto y devuelve la ruta del directorio. Sin embargo, parece que este método no se llama de manera periódica.

    Para solucionar este problema, podemos verificar los siguientes puntos:

    1. Verifique si la anotación @EnableScheduling está presente en la clase de la aplicación de Spring Boot. Esto habilita las características de programación de Spring y nos permite usar la anotación @Scheduled para ejecutar tareas periódicas.
    2. Asegúrese de que las dependencias spring-integration-core y spring-integration-sftp estén incluidas en el proyecto. Necesitamos estas dependencias para usar el soporte SFTP de Spring Integration.

    3. Verifique que @InboundChannelAdapter esté registrado como un componente usando la anotación @Component o su equivalente. Esto asegura que el método sea invocado por el contenedor de Spring.

    4. Verifique los mensajes de registro en busca de errores o trazas de pila relacionadas con el flujo de integración SFTP. Esto puede ayudar a identificar cualquier problema con el servidor SFTP o la configuración del flujo de integración.

    5. Intente cambiar el valor de fixedDelay a un valor más bajo, como 1 segundo, para ver si el intervalo de recuperación es el problema.

    6. Si los pasos anteriores no funcionan, podemos agregar declaraciones de registro en el método filesForGET para verificar si se está llamando o no. Además, podemos intentar usar la anotación @Scheduled para ejecutar el método filesForGET periódicamente.

    En general, parece que el problema podría estar relacionado con una configuración incorrecta o dependencias faltantes. Al verificar estos puntos, podemos solucionar el problema y asegurarnos de que se recupere periódicamente el servidor SFTP para recuperar archivos del directorio remoto.

Comments are closed.