Я использую Spring Integration для обработки сеанса sftp. Я заметил, что для использования нескольких сеансов и переключения между ними во время выполнения мне нужно использовать DelegatingSessionFactory и его метод setThreadKey. p>
Этот метод является потокобезопасным?
Если нет. Как правильно его реализовать, гарантируя потокобезопасность?
Пример:
@Bean
public IntegrationFlow flow() {
return IntegrationFlow
.from("uploadFile")
.handle(Sftp.outboundAdapter(delegatingSessionFactory(), FileExistsMode.IGNORE)
.remoteDirectory("/upload")
.fileNameGenerator(message -> String.format("my_xml_%s.xml", LocalDateTime.now())))
.get();
}
@Bean
public DelegatingSessionFactory delegatingSessionFactory() {
Map factoryMap = new HashMap();
for (UsersProperties.User user : usersProperties.getUsers()){
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(false);
factory.setAllowUnknownKeys(true);
factory.setHost(user.getHost());
factory.setPort(user.getPort());
factory.setUser(user.getUsername());
factory.setPassword("");
factoryMap.put(user.getKey(),factory);
}
DefaultSessionFactoryLocator factoryLocator = new DefaultSessionFactoryLocator(factoryMap);
return new DelegatingSessionFactory(factoryLocator);
}
@Service
@RequiredArgsConstructor
@Slf4j
public class SftpServiceImpl implements SftpService {
private final UploadMessagingGateway uploadMessagingGateway;
private final DelegatingSessionFactory delegatingSessionFactory;
@Override
public void loadSftp(byte[] bytes, String filename, SftpThreadKey threadKey) {
delegatingSessionFactory.setThreadKey(threadKey);
uploadMessagingGateway.uploadFile(bytes, filename, threadKey);
log.info("File uploaded: {}", filename);
delegatingSessionFactory.clearThreadKey();
}
}
@MessagingGateway
public interface UploadMessagingGateway {
@Gateway(requestChannel = "uploadfile")
void uploadFile(byte[] xmlByte,
@Header("filename") String filename,
@Header("sftpThreadKey") SftpThreadKey threadKey);
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... hread-safe
Делегирование сеансов Factory. Интеграция Spring с потокобезопасностью. ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение