Spring Integrationを用いた統合アプリケーションの構築
Spring Integrationは、Enterprise Integration Patterns(EIP)に基づくメッセージ駆動型の統合ソリューションを提供するSpringエコシステムの一部です。Mavenを使用するJavaプロジェクトでは、必要なモジュールをpom.xmlに適切に宣言することで、迅速に導入できます。
1. 必須依存関係の追加
基本的な統合機能を利用するには、spring-integration-coreが必須です。最新バージョンを利用するために、以下のように記述します。
<dependencies>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
<version>6.1.0</version>
</dependency>
</dependencies>
他のアダプタモジュール(例:ファイル、HTTP、JDBC)を追加すると、自動的にcoreがトランジティブ依存として含まれるため、個別に宣言する必要はありません。
2. Spring Boot環境での簡略化されたセットアップ
Spring Bootを利用している場合、スターターデペンデンシーにより依存管理が容易になります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
このスターターはspring-integration-coreとspring-messagingを含み、さらに@EnableIntegrationの自動構成も提供します。必要に応じて、Webやデータベース連携用のスターターも追加します。
3. 設定方法:XMLまたはJava Configuration
XMLによる定義
src/main/resources/integration-context.xmlのようなファイルを作成し、チャネルやエンドポイントを定義します。
<?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:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration https://www.springframework.org/schema/integration/spring-integration.xsd">
<int:channel id="requestChannel"/>
<int:channel id="replyChannel"/>
<int:transformer input-channel="requestChannel"
output-channel="replyChannel"
expression="payload.toUpperCase()"/>
</beans>
Java Configによる構成
アノテーションベースの構成では、次のように記述します。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.messaging.MessageChannel;
@Configuration
@EnableIntegration
@IntegrationComponentScan
public class IntegrationConfiguration {
@Bean
public MessageChannel requestChannel() {
return new DirectChannel();
}
@Bean
public MessageChannel replyChannel() {
return new DirectChannel();
}
}
4. 実際の処理フローの実装例
メッセージを受け取り、処理を行い、結果を返すサービスアクティベータをJavaで定義します。
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
@Component
public class TextProcessor {
@ServiceActivator(inputChannel = "requestChannel", outputChannel = "replyChannel")
public String handleText(@Payload String text) {
return "Processed: " + text.trim();
}
}
5. プロジェクトの起動とテスト
Spring Bootアプリケーションの場合、メインクラスからコンテキストを起動します。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class IntegrationApplication {
public static void main(String[] args) {
var context = SpringApplication.run(IntegrationApplication.class, args);
// メッセージ送信によるテストなど
}
}
6. 主要なアダプタモジュール
- spring-integration-file: ファイルシステムとの連携
- spring-integration-http: REST API呼び出しの送受信
- spring-integration-jdbc: SQLクエリ実行と結果処理
- spring-integration-kafka: Apache Kafkaとの統合
- spring-integration-amqp: RabbitMQなどのAMQPブローカー対応
- spring-integration-xml: XMLペイロードの変換と操作
7. リポジトリの指定(必要に応じて)
通常はMaven Centralから取得可能ですが、特定のマイナーバージョンやスナップショットが必要な場合は、Springのリポジトリを追加できます。
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones Repository</name>
<url>https://repo.spring.io/milestone</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
8. 追加の依存管理について
JSON処理を行う場合など、特定の機能には追加ライブラリが必要です。たとえば、Jacksonライブラリは明示的に宣言しなければなりません。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
Gradleなどの他のビルドツールでも同様の注意点があります。