Статьи

Spring Integration Автономное приложение с Spring Boot

Ранее я писал в блоге о том, как написать отдельное приложение Spring Integration.
Spring Boot значительно упрощает создание этого автономного приложения.

Простым потоком было опросить службу USGS, предоставляющую информацию о землетрясениях во всем мире, и зарегистрировать эту информацию. Процесс, описанный с помощью Spring Integration, выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<int:inbound-channel-adapter channel="quakeinfotrigger.channel" expression="''">
  <int:poller fixed-delay="60000"></int:poller>
 </int:inbound-channel-adapter>
 
 <int:channel id="quakeinfo.channel">
  <int:queue capacity="10"/>
 </int:channel>
 
 <int:channel id="quakeinfotrigger.channel"></int:channel>
 
 <int-http:outbound-gateway id="quakerHttpGateway"
     request-channel="quakeinfotrigger.channel"
     http-method="GET"
     expected-response-type="java.lang.String"
     charset="UTF-8"
     reply-timeout="5000"
     reply-channel="quakeinfo.channel">    
 </int-http:outbound-gateway>
 
 <int:logging-channel-adapter id="messageLogger" log-full-message="true" channel="quakeinfo.channel" level="ERROR">
  <int:poller fixed-delay="5000" ></int:poller>
 </int:logging-channel-adapter>

Перед загрузкой способ написания основной программы для запуска этого потока был бы следующим:

1
2
3
4
5
6
7
8
9
package standalone;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class Main {
 public static void main(String[] args) {
  ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/httpgateway.xml");
  applicationContext.registerShutdownHook();
 }
}

С Spring-boot, однако, конфигурация ИМХО проще:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
package standalone;
 
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
 
@Configuration
@ImportResource("classpath:httpgateway.xml")
public class Main {
 
 public static void main(String[] args) {
  SpringApplication.run(Main.class, args);
 }
}

И с этим изменением, наряду с плагином spring-boot-maven-plugin, приложение может быть запущено следующим образом:

1
mvn spring-boot:run

Я приложил очень мало усилий для исправления этого сценария запуска, внеся изменения в плагин для запуска приложения без необходимости сначала вручную запускать этап компиляции.

Более того, плагин spring-boot-maven-plugin предоставляет инструменты для упаковки всего приложения в исполняемый файл jar, который запускается на этапе упаковки, в соответствии с плагином shade:

1
mvn package

и исполняемый файл jar запускается так:

1
java -jar target/si-standalone-sample-1.0-SNAPSHOT.jar
  • Обновленный проект с этим изменением доступен по адресу github — https://github.com/bijukunjummen/si-standalone-sample.

Ссылка: Spring Integration Автономное приложение с Spring Boot от нашего партнера JCG Биджу Кунджуммен в блоге all and sundry.