Spring Integration File Support 튜토리얼을 통해 코드를 작성했으며 특정 위치에서 파일을 폴링하고 추가 처리합니다. 나는 다음과 같은 내 bean.xml이 때문에 폴링 목적을 위해 내가 봄 통합의 인바운드 및 아웃 바운드 채널 어댑터를 사용하고 있습니다 :SFTP 인바운드/아웃 바운드 채널 어댑터에 대해 별도의 채널 선언이있는 이유와 단순한 파일 인바운드/아웃 바운드 채널 어댑터가 필요한 이유는 무엇입니까?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:integration="http://www.springframework.org/schema/integration"
xmlns:file="http://www.springframework.org/schema/integration/file"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/file
http://www.springframework.org/schema/integration/file/spring-integration-file.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />
<file:inbound-channel-adapter id="filesIn"
directory="file:${java.io.tmpdir}/input">
<integration:poller id="poller" fixed-rate="60000" />
</file:inbound-channel-adapter>
<integration:service-activator
input-channel="filesIn" output-channel="filesOut" ref="handler" />
<file:outbound-channel-adapter id="filesOut"
directory="file:${java.io.tmpdir}/archive" delete-source-files="true">
</file:outbound-channel-adapter>
<bean id="handler" class="com.m.c.Handler" />
</beans>
이제 내 주요 클래스는 다음과 같습니다
@SpringBootConfiguration
@EnableScheduling
public class App{
private static final Log LOGGER = LogFactory.getLog(App.class);
public static void main(String[] args)
{
SpringApplication.run(App.class, args);
}
@Scheduled(fixedDelay = 60000)
public static void display() throws InvalidFormatException, IOException{
ApplicationContext context = new ClassPathXmlApplicationContext("/spring/integration/bean.xml", App.class);
File inDir = (File) new DirectFieldAccessor(context.getBean(FileReadingMessageSource.class)).getPropertyValue("directory");
LiteralExpression expression = (LiteralExpression) new DirectFieldAccessor(context.getBean(FileWritingMessageHandler.class)).getPropertyValue("destinationDirectoryExpression");
File outDir = new File(expression.getValue());
LOGGER.info("Input directory is: " + inDir.getAbsolutePath());
LOGGER.info("Archive directory is: " + outDir.getAbsolutePath());
LOGGER.info("===================================================");
}
}
파일을 처리하기위한 처리기 클래스가 있는데, 이것은 잘 작동합니다.
이제는 SFTP 원격 서버에 대해 동일한 메커니즘을 만들고 해당 위치에서 파일을 폴링하고 처리 된 파일을 다른 SFTP 위치에 저장하려고합니다.
그래서 bean.xml을 적절하게 구성하고 SFTP 용 인바운드 및 아웃 바운드 채널 어댑터를 작성했습니다. 서비스 액티베이터 부분에 와서 인바운드 및 아웃 바운드 채널 어댑터 용으로 별도의 채널을 구성하고 ID가 제대로 작동하는 간단한 파일 폴러에 표시되지 않은 service-activator에 ID를 제공해야한다는 사실을 발견했습니다. 그렇다면 인바운드 및 아웃 바운드 채널 어댑터에는 왜 개별 채널이 필요합니까? 그리고 만약 그들이 필요하다면 우리는 스케줄 된 파일 폴링 서비스에 대해 어떻게 구현할 것인가?
SFTP에 대해 비슷한 설정으로 모의 테스트 케이스를 실행했으며 내 암시 적 채널에 대한 이의 제기가 없습니다. 따라서 새 구성에 문제가있을 수 있습니다. –