Делегирование сеансов Factory. Интеграция Spring с потокобезопасностью.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Делегирование сеансов Factory. Интеграция Spring с потокобезопасностью.

Сообщение Anonymous »

Я использую 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • JPA EntityManager возвращает старое состояние после обновления -> проблема с потокобезопасностью?
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • JPA EntityManager возвращает старое состояние после обновления → проблема с потокобезопасностью?
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Factory-boy: используйте параметры в поле Factory.List
    Anonymous » » в форуме Python
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous
  • Делегирование конструктору перемещения по умолчанию
    Anonymous » » в форуме C++
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • JQuery не работает с новыми элементами (делегирование событий)
    Anonymous » » в форуме Jquery
    0 Ответы
    56 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»