我有一个Web项目,我正在使用Spring集成通过FTP在远程目录上进行文件上传。但是,FTP属性是动态加载的(来自数据库),并且它们对于每个请求都可能不同。原始的方法:春季集成上传与动态FTP属性
最初创建DefaultFtpSessionFactory
豆:
@Bean
public DefaultFtpSessionFactory defaultFtpSessionFactory() {
return new DefaultFtpSessionFactory();
}
IntegrationFlow
豆:
@Bean
public IntegrationFlow integrationFlow(DefaultFtpSessionFactory defaultFtpSessionFactory) {
// Flow config
}
注入这个bean到控制器和设置属性:
@Autowired
private DefaultFtpSessionFactory defaultFtpSessionFactory;
@Autowired
private FtpConfigService ftpConfigService;
@RequestMapping(value = "upload", method = RequestMethod.GET)
public RequestEntity<String> upload() {
defaultFtpSessionFactory.setHost(ftpConfigService.getHost());
// Set other properties
// ... and upload file
return new RequestEntity<>(HttpStatus.OK);
}
当然,这由于存在竞争条件(两个请求者),所以这是一个坏主意sts可以在同一时间访问DefaultFtpSessionFactory
单身人士)。那么,我怎样才能以安全的方式实现这一目标呢?
您可以做的是创建一个消息,其中包含您的ftp负载和会话属性,您可以使用它更新流中的sessionFactory。 – JEY