spring-integration勉強中です。
というわけで https://github.com/pakmans/spring-batch-integration-example の方のコードを参考に、監視先ディレクトリにファイルが作られたらメッセージハンドラが呼び出される、というだけのコードを動かした。詳しいことはまだ良く分かっていない。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>kagamihoge</groupId> <artifactId>integratesample1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>integratesample1</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>11</java.version> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-file</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
package kagamihoge.integratesample1; import java.io.File; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.annotation.Bean; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.core.MessageSource; import org.springframework.integration.dsl.IntegrationFlow; import org.springframework.integration.dsl.IntegrationFlows; import org.springframework.integration.dsl.Pollers; import org.springframework.integration.file.FileReadingMessageSource; import org.springframework.integration.file.FileReadingMessageSource.WatchEventType; import org.springframework.integration.file.filters.SimplePatternFileListFilter; @SpringBootApplication public class App { public static void main(String[] args) { new SpringApplicationBuilder(App.class).web(WebApplicationType.NONE).run(args); } @Bean public IntegrationFlow sampleFlow() { return IntegrationFlows // .from(fileReadingMessageSource(), c -> c.poller(Pollers.fixedDelay(5000)))// .channel(new DirectChannel()) // .handle(msg -> { File file = (File) msg.getPayload(); System.out.println(file); }) // .get(); } @Bean public MessageSource<File> fileReadingMessageSource() { FileReadingMessageSource source = new FileReadingMessageSource(); source.setDirectory(new File("dropfolder")); source.setFilter(new SimplePatternFileListFilter("*.txt")); source.setUseWatchService(true); source.setWatchEvents(WatchEventType.CREATE); return source; } }
上記を起動して監視先ディレクトリに適当にファイルを作る。そうすると以下のように出力される。
2019-06-26 22:04:10.636 INFO 5224 --- [ main] kagamihoge.integratesample1.App : Started App in 1.366 seconds (JVM running for 1.679) dropfolder\sdf - コピー (2).txt dropfolder\sdf - コピー (3).txt dropfolder\sdf - コピー.txt dropfolder\sdf.txt
これでとりあえず、ファイル作成を検出してメッセージハンドラに通知が飛ぶ、というのが出来た。