Интеграция Spring Boot SFTP и Google Cloud Storage - PullRequest
0 голосов
/ 11 февраля 2019

Извините за мою плохую грамматику английского языка.Я работаю над проектами, в которых нам нужно загрузить данные с SFTP-сервера в Google Cloud Storage с помощью Spring Boot.SFTP-сервер получает данные (file.txt), поступающие от многих датчиков в определенное время, пусть каждые 10 минут. Этот текстовый файл нам нужно синхронизировать с Google Cloud Storage.Всякий раз, когда новый файл загружается на SFTP-сервер, его следует загружать в Google Cloud Storage. Я использую Spring SFTP-интеграцию. Я могу синхронизировать данные с SFTP-сервера в корзины Google Cloud Storage. Но я не уверен, как удалитьлокальные временные файлы, когда файл передается в GCP Storage для всех файлов. . Пожалуйста, найдите мои коды ниже. (У меня есть базовые знания о Spring. Я просто использую аннотацию для выполнения этой задачи.) Я нашел некоторый URL в stackoverflowи использование.

Пример SFTP интеграции Spring с Spring Boot

package com.interiorclientapi.sftp;

import org.springframework.beans.factory.annotation.Autowired;
import java.io.File;
import org.springframework.cloud.gcp.storage.integration.GcsSessionFactory;
import org.springframework.cloud.gcp.storage.integration.outbound.GcsMessageHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.integration.annotation.InboundChannelAdapter;
import org.springframework.integration.annotation.Poller;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.expression.ValueExpression;
import org.springframework.integration.file.filters.AcceptOnceFileListFilter;
import org.springframework.integration.file.remote.session.CachingSessionFactory;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.sftp.inbound.SftpInboundFileSynchronizer;
import org.springframework.integration.sftp.inbound.SftpInboundFileSynchronizingMessageSource;
import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
import org.springframework.messaging.MessageHandler;
import org.springframework.stereotype.Component;

import com.google.cloud.storage.Storage;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class InteriorClientApiSFTP {

     @Autowired
     SFTPProperties sftpProperties;

     private static final Logger logger = LoggerFactory.getLogger(InteriorClientApiSFTP.class);

    @Bean
    public SessionFactory<LsEntry> sftpSessionFactory() {
        DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
        String port = sftpProperties.getPort();
        factory.setHost(sftpProperties.getHost());
        factory.setPort(port!=null?Integer.parseInt(port):22);
        factory.setUser(sftpProperties.getsftpUsername());
        factory.setPassword(sftpProperties.getsftpPassword());
        factory.setAllowUnknownKeys(true);
        System.out.println("creating seession to sftp server");
        return new CachingSessionFactory<LsEntry>(factory);
    }

    @Bean
    public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
        SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
        fileSynchronizer.setDeleteRemoteFiles(false);
        fileSynchronizer.setRemoteDirectory(sftpProperties.getRemotedirectory());
       // fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter("*.txt"));
        System.out.println("inside  sftpInboundFileSynchronizer");
        return fileSynchronizer;
    }


@Bean
@InboundChannelAdapter(channel = "mineChannel", poller = @Poller(fixedDelay = "5000"))
public MessageSource<File> sftpMessageSource() {
        SftpInboundFileSynchronizingMessageSource source = new SftpInboundFileSynchronizingMessageSource(
                sftpInboundFileSynchronizer());     
        source.setLocalDirectory(new File(sftpProperties.getLocaldirectory()));
        source.setAutoCreateLocalDirectory(true);
        source.setLocalFilter(new AcceptOnceFileListFilter<File>());
        System.out.println("inside  sftpMessageSource");
        return source;
    }

 @Bean
 @ServiceActivator(inputChannel = "mineChannel")
 public MessageHandler outboundChannelAdapter(Storage gcs) {
      GcsMessageHandler outboundChannelAdapter = new GcsMessageHandler(new GcsSessionFactory(gcs));    
      outboundChannelAdapter.setRemoteDirectoryExpression(new ValueExpression<>(sftpProperties.getGcpSFTPBucket())); 
      System.out.println("outboundChannelAdapter");
      return outboundChannelAdapter;
 } 

}
...