2016-12-04 95 views
0

Spring Integration 4.3引入了異步ServiceActivators,但是我沒有看到沒有XML配置的情況下我如何使用它們。Spring Integration 4.3中的Async ServiceActivator

相關問題https://jira.spring.io/browse/INT-3945提到將功能添加到@ServiceActivator,但似乎沒有實現。

文檔中提到:

4.3版本開始,你現在可以設置異步屬性設置爲true(setAsync(真)使用Java配置時)。

但它沒有提及調用該方法的對象。在我看來,你必須明確地定義一個消息處理程序bean來調用該方法。 通常這不是必需的,用@ServiceActivator註釋方法定義目標bean就足夠了。

我錯過了一些東西,或者基於註釋的配置已被排除在此功能之外。任何人都可以闡明這一點嗎?

回答

1

你是對的;它目前不支持帶註釋的POJO方法。

你可以解決它與配置bean(自動裝配的消息處理程序,並設置異步標誌)...

@SpringBootApplication 
public class So40962780Application { 

    public static void main(String[] args) { 
     SpringApplication.run(So40962780Application.class, args); 
    } 

    @InboundChannelAdapter(channel = "in", poller = @Poller(fixedRate = "5000")) 
    public String gen() { 
     return "foo"; 
    } 

    @ServiceActivator(inputChannel = "in", outputChannel = "out") 
    public ListenableFuture<String> foo(String in) { 
     SettableListenableFuture<String> future = new SettableListenableFuture<>(); 
     future.set(in.toUpperCase()); 
     return future; 
    } 

    @ServiceActivator(inputChannel = "out") 
    public void syso(Object payload) { 
     System.out.println(payload); 
    } 

    @Bean 
    public AsyncConfigurer asyncConfigurer() { 
     return new AsyncConfigurer(); 
    } 

    public static class AsyncConfigurer { 

     @Autowired 
     @Qualifier("so40962780Application.foo.serviceActivator.handler") 
     private AbstractReplyProducingMessageHandler fooHandler; 

     @PostConstruct 
     public void configureAsync() { 
      this.fooHandler.setAsync(true); 
     } 

    } 

} 
+0

謝謝,很好的解決辦法,我也不會拿出它我自己。我」 m雖然好奇,但它爲什麼在註釋中不被支持,因爲它似乎是有意這樣做的。疏忽?或者一些意想不到的困難?初看起來,似乎很容易添加。 – rainerfrey

+0

只是一個疏忽。工廠bean支持它,但不支持註釋。隨意打開JIRA問題。 –