Я использую 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
Программисты JAVA общаются здесь
1716313884
Anonymous
Я использую Spring Integration для обработки сеанса sftp. Я заметил, что для использования нескольких сеансов и переключения между ними во время выполнения мне нужно использовать DelegatingSessionFactory и его метод [b]setThreadKey[/b]. 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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78512840/delegating-session-factory-spring-integration-thread-safe[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия