mock sftp config for active.profile=test

This commit is contained in:
etreschenkov 2024-05-28 10:31:39 +03:00
parent b2015a9aa4
commit 6a4a7ec4e7
10 changed files with 172 additions and 52 deletions

View file

@ -1,19 +1,23 @@
package ru.spcex.clearing.dbf.exporter.config;
import java.io.File;
import java.util.List;
import com.jcraft.jsch.ChannelSftp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.integration.annotation.Gateway;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway;
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.LS;
import org.springframework.integration.file.remote.session.CachingSessionFactory;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.gateway.AnnotationGatewayProxyFactoryBean;
import org.springframework.integration.sftp.gateway.SftpOutboundGateway;
import org.springframework.integration.sftp.outbound.SftpMessageHandler;
import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
@ -24,11 +28,7 @@ import org.springframework.messaging.handler.annotation.Header;
import org.springframework.messaging.handler.annotation.Payload;
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
import java.io.File;
import java.util.List;
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.LS;
@Profile("!test")
@Configuration
public class SFTPConfig {
protected Logger log = LoggerFactory.getLogger(getClass());
@ -60,7 +60,11 @@ public class SFTPConfig {
return handler;
}
@MessagingGateway
// https://stackoverflow.com/questions/53655208/profile-doesnt-work-with-messaging-gateway
@Bean("dbfGateway")
public AnnotationGatewayProxyFactoryBean dbfGateway() {
return new AnnotationGatewayProxyFactoryBean(DbfGateway.class);
}
public interface DbfGateway {
@Gateway(requestChannel = "toSftpChannel")
void sendToSftp(@Payload File file, @Header("path") String path);

View file

@ -0,0 +1,32 @@
package ru.spcex.clearing.dbf.exporter.config;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.integration.sftp.session.SftpFileInfo;
@Profile("test")
@Configuration
public class SFTPMockConfig {
@Bean("dbfGateway")
public SFTPConfig.DbfGateway dbfGateway(){
return new DGateway();
}
public static class DGateway implements SFTPConfig.DbfGateway{
@Override
public void sendToSftp(File file, String path) {
}
@Override
public List<SftpFileInfo> listFiles(String dir) {
return new ArrayList<>();
}
}
}

View file

@ -1,7 +1,17 @@
package ru.spcex.clearing.dbf.exporter.logic.stages;
import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Supplier;
import com.linuxense.javadbf.DBFWriter;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import ru.spcex.clearing.dbf.exporter.config.SFTPConfig;
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
@ -10,6 +20,8 @@ import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
import ru.spcex.clearing.dbf.exporter.services.converters.DFConverter;
import static ru.spcex.clearing.dbf.exporter.services.converters.DFConverter.ruCurrency;
import static ru.spcex.clearing.platform.messaging.domain.Consts.PAIR_SDF;
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.PairSdfRequest;
import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
@ -18,14 +30,6 @@ import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.io.File;
import java.nio.charset.Charset;
import java.util.*;
import java.util.function.Supplier;
import static ru.spcex.clearing.dbf.exporter.services.converters.DFConverter.ruCurrency;
import static ru.spcex.clearing.platform.messaging.domain.Consts.PAIR_SDF;
/**
* Выгрузка данных из мапы hazelcast и их запись в файлы
*/
@ -41,7 +45,7 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
public ExportFromHazelcast(ExportDBFServiceSettings settings,
ImdgProvider imdgProvider,
SFTPConfig.DbfGateway gateway,
@Qualifier("dbfGateway") SFTPConfig.DbfGateway gateway,
List<DFConverter> converters,
Supplier<KafkaSender> kafkaSender) {
this.settings = settings;

View file

@ -1,6 +1,17 @@
package ru.spcex.clearing.dbf.exporter.logic.stages;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.sftp.session.SftpFileInfo;
import org.springframework.stereotype.Component;
import ru.spcex.clearing.dbf.exporter.config.SFTPConfig;
@ -10,13 +21,6 @@ import ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.util.*;
/**
* Создание DBF файла
*/
@ -27,7 +31,8 @@ public class PrepareDBFFile extends Stage implements InitializingBean {
public static String outDir;
private final SFTPConfig.DbfGateway gateway;
public PrepareDBFFile(ExportDBFServiceSettings settings, SFTPConfig.DbfGateway gateway) {
public PrepareDBFFile(ExportDBFServiceSettings settings,
@Qualifier("dbfGateway") SFTPConfig.DbfGateway gateway) {
this.settings = settings;
this.gateway = gateway;
}

View file

@ -1,29 +1,29 @@
package ru.spcex.clearing.dbf.importer.config;
import java.io.File;
import java.util.List;
import com.jcraft.jsch.ChannelSftp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.integration.annotation.Gateway;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway;
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.MGET;
import org.springframework.integration.file.remote.session.CachingSessionFactory;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.gateway.AnnotationGatewayProxyFactoryBean;
import org.springframework.integration.sftp.gateway.SftpOutboundGateway;
import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings;
import java.io.File;
import java.util.List;
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.MGET;
@Profile("!test")
@Configuration
public class SFTPConfig {
private final Logger log = LoggerFactory.getLogger(getClass());
@ -45,7 +45,12 @@ public class SFTPConfig {
return new CachingSessionFactory<>(factory);
}
@MessagingGateway
// https://stackoverflow.com/questions/53655208/profile-doesnt-work-with-messaging-gateway
@Bean("dbfGateway")
public AnnotationGatewayProxyFactoryBean dbfGateway() {
return new AnnotationGatewayProxyFactoryBean(DbfGateway.class);
}
public interface DbfGateway {
@Gateway(requestChannel = "listSftpChannel")
List<File> listFiles(String dir);

View file

@ -0,0 +1,26 @@
package ru.spcex.clearing.dbf.importer.config;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile("test")
@Configuration
public class SFTPMockConfig {
@Bean("dbfGateway")
public SFTPConfig.DbfGateway dbfGateway(){
return new DGateway();
}
public static class DGateway implements SFTPConfig.DbfGateway{
@Override
public List<File> listFiles(String dir) {
return new ArrayList<>();
}
}
}

View file

@ -1,21 +1,27 @@
package ru.spcex.clearing.dbf.importer.services;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.dbf.importer.config.SFTPConfig;
import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings;
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
import ru.spcex.platform.utils.log.ExceptionUtils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.dbf.importer.config.SFTPConfig;
import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings;
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
import ru.spcex.platform.utils.log.ExceptionUtils;
@Service("fileChecker")
public class FileChecker {
@ -23,7 +29,7 @@ public class FileChecker {
private final Logger log = LoggerFactory.getLogger(this.getClass());
private final SFTPConfig.DbfGateway gateway;
public FileChecker(SFTPConfig.DbfGateway gateway,
public FileChecker(@Qualifier("dbfGateway") SFTPConfig.DbfGateway gateway,
ImportDBFServiceSettings settings) {
this.gateway = gateway;
this.settings = settings;

View file

@ -1,5 +1,7 @@
package ru.spcex.clearing.swt.exporter.config;
import java.io.File;
import java.util.List;
import com.jcraft.jsch.ChannelSftp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -7,15 +9,17 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.expression.common.LiteralExpression;
import org.springframework.integration.annotation.Gateway;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.LS;
import org.springframework.integration.file.remote.session.CachingSessionFactory;
import org.springframework.integration.file.remote.session.SessionFactory;
import org.springframework.integration.gateway.AnnotationGatewayProxyFactoryBean;
import org.springframework.integration.sftp.gateway.SftpOutboundGateway;
import org.springframework.integration.sftp.outbound.SftpMessageHandler;
import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
@ -24,11 +28,7 @@ import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import ru.spcex.clearing.swt.exporter.config.settings.ExportSwtServiceSettings;
import java.io.File;
import java.util.List;
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.LS;
@Profile("!test")
@Configuration
@ConditionalOnProperty(value="export-swt-service.sftp-out.sftp-out-dir")
public class SFTPConfig {
@ -95,7 +95,12 @@ public class SFTPConfig {
.get();
}
@MessagingGateway(name = "notificationsSftpGateway")
// https://stackoverflow.com/questions/53655208/profile-doesnt-work-with-messaging-gateway
@Bean("notificationsSftpGateway")
public AnnotationGatewayProxyFactoryBean dbfGateway() {
return new AnnotationGatewayProxyFactoryBean(SftpGateway.class);
}
public interface SftpGateway {
@Gateway(requestChannel = "toSftpChannel")
void sendToSftp(File file);

View file

@ -0,0 +1,32 @@
package ru.spcex.clearing.swt.exporter.config;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.integration.sftp.session.SftpFileInfo;
@Profile("test")
@Configuration
public class SFTPMockConfig {
@Bean("notificationsSftpGateway")
public SFTPConfig.SftpGateway dbfGateway(){
return new SftpGateway();
}
public static class SftpGateway implements SFTPConfig.SftpGateway{
@Override
public void sendToSftp(File file) {
}
@Override
public List<SftpFileInfo> listFiles(String dir) {
return new ArrayList<>();
}
}
}

View file

@ -1,5 +1,8 @@
package ru.spcex.clearing.swt.importer.config;
import java.io.File;
import java.util.Comparator;
import java.util.concurrent.TimeUnit;
import com.jcraft.jsch.ChannelSftp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -7,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.integration.annotation.InboundChannelAdapter;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.core.MessageSource;
@ -21,10 +25,7 @@ import org.springframework.messaging.MessageHandler;
import org.springframework.scheduling.support.PeriodicTrigger;
import ru.spcex.clearing.swt.importer.config.settings.ImportSWTServiceSettings;
import java.io.File;
import java.util.Comparator;
import java.util.concurrent.TimeUnit;
@Profile("!test")
@Configuration
@ConditionalOnProperty(value="import-swt-service.store.sftp-in.sftp-src-dir")
public class SFTPConfig {