2017-10-18 9 views
1

Je suis en train d'utiliser la passerelle sortante pour télécharger des fichiers à partir de plusieurs serveurs SFTP, le nombre de serveur SFTP est configuré dans les propriétés (ce qui signifie que je dois définir la connexion dynamique), mes application.properties:comment définir plusieurs connexions sftp?

sftp.host=host1,host2 
sftp.user=user1,user2 
sftp.pwd=pwd1,pwd2 

courant I utiliser la config java comme:

@Configuration 

public class SFtpConfig {

static Logger logger = LoggerFactory.getLogger(SFtpConfig.class); 

@Autowired 
SftpServerProperties sftpServerProperties; 

@Autowired 
SftpClientProperties sftpClientProperties; 

@Bean 
public SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory() { 

... 
} 

@Bean(name = "myGateway") 
@ServiceActivator(inputChannel = "sftpChannel") 
public MessageHandler handlerLs() { 

... 
} 

@MessagingGateway 
public interface DownloadGateway { 
    @Gateway(requestChannel = "sftpChannel") 
    List<File> start(String dir); 
} 

@Bean(name="sftpChannel") 
public MessageChannel sftpChannel() { 
    return new DirectChannel(); 
} 

} 

mais cette config est seulement pour se connecter à un serveur sftp, alors comment puis-je définir plusieurs connexions sftp en utilisant la configuration application.properties? Je veux dire le nombre dynamique de sessionFactory/gestionnaire/passerelle/channer (une partie du bean a l'annotation, comment définir dynamique ce type de bean?)

Répondre

0

Vous devez considérer pour déclarer des enfants ApplicationContext avec le même contenu mais des propriétés différentes pour ConnectionFactories:

/** 
* Set the parent of this application context. 
* <p>Note that the parent shouldn't be changed: It should only be set outside 
* a constructor if it isn't available when an object of this class is created, 
* for example in case of WebApplicationContext setup. 
* @param parent the parent context 
* @see org.springframework.web.context.ConfigurableWebApplicationContext 
*/ 
void setParent(@Nullable ApplicationContext parent); 
+0

Salut @Artem, pouvez-vous donner plus de conseils? le nombre de serveur sftp est décidé par le fichier de propriétés, j'ai essayé BeanDefinitionRegistryPostProcessor mais pas de succès. –