使.NET陷入Java的时间很长。
我正在寻找一个示例,该示例说明如何定期下载文件,从文件中读取文本,然后基于使用Springs Integration库和基于注释的方法的读取采取一些措施。
我想从运输提供商处提取GTFS格式的zip文件。该提供程序生成带有时间戳的简单文本文件,以指示最后的发布时间。
具体来说,数据生产者在以下位置发布文本文件:
https://someserver.com/gfts/published.txt
此文件有一个简单的时间戳,指示上次发布其数据文件的时间。
然后有数据:
https://someserver.com/gfts/schedule.zip
我试图找到一些有关如何轮询“已发布”文件的示例。基本上,我想定期下载文件并检查时间戳,以确定是否应下载时间表。
我看到的大多数示例都在spring中使用基于XML的配置-而且我几乎没有坚持使用基于注释的方法。我也看到了使用FTP / SFTP下载文件的示例。
我需要使用http并且我还需要包括基本授权(在标题中)。
据我所知。我不确定如何进行接线?
从Spring Integration文档中-这就是我应该声明的出站网关的方式(我认为那是我需要的?)
现在的问题是什么?我需要HttpRequestExecutingMessageHandler来将流(文件)保存为本地文件,以便我可以读取内容并采取其他措施吗?
@Configuration
@EnableIntegration
public class GtfsConfiguration {
@Bean
public MessageChannel fileUpdateChannel () {
return new DirectChannel();
}
@Bean
@ServiceActivator(inputChannel = "fileUpdateChannel", polling = @Poller(fixedDelay="5000")
public HttpRequestExecutingMessageHandler fileUpdateGateway() {
HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("https://someserver.com/gtfs/raw/published.txt");
handler.setHttpMethod(HttpMethod.GET);
handler.setExpectedResponseType(byte[].class);
return handler;
}
}
答案 0 :(得分:1)
如果需要定期下载这样的文件,则需要使用“假”入站通道适配器,例如:
@Bean
@InboundChannelAdapter(value = "fileUpdateChannel"
poller = @Poller(fixedDelay = "1000", maxMessagesPerPoll = "1"))
public String downloadFileSchedule() {
return () -> "";
}
@ServiceActivator
的{{1}}将每秒被调用一次。您不需要在HttpRequestExecutingMessageHandler
上有@Poller
。它本身不会做任何事情。另外,您的@ServiceActivator
是fileUpdateChannel
,而不是DirectChannel
。
我认为您不需要在本地保存下载的文件。我什至会说QueueChannel
足以将文件内容作为回复消息handler.setExpectedResponseType(String.class);
进行下游分析。
配置基本授权的最简单方法是使用Apache Commons HTTP Client:
payload
并在CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials
= new UsernamePasswordCredentials("user1", "user1Pass");
provider.setCredentials(AuthScope.ANY, credentials);
HttpClient client = HttpClientBuilder.create()
.setDefaultCredentialsProvider(provider)
.build();
中使用它,然后应通过其HttpComponentsClientHttpRequestFactory
将其注入到所提到的HttpRequestExecutingMessageHandler
中。