2015-06-12 66 views
3

我无法找到轮询入站数据的JPA源的有用示例。我知道如何在XML中做到这一点,但不知道如何在DSL中做到这一点。示例JPA入站通道适配器的弹簧集成DSL

简而言之,我想要做的是定期轮询JPA存储库中的记录,然后将记录放入将执行常规过滤/转换/执行的流中。

亲切的问候

大卫·史密斯

回答

2

线了JpaPollingChannelAdapter@Bean和使用

IntegrationFlows.from(jpaMessageSource(), 
         c -> c.poller(Pollers.fixedDelay(1000))) 
       .transform(...) 
       ... 

配置选项见DSL Reference

这是一个靠近顶部(具有不同的消息源)。

2

您是对的:Spring Integration Java DSL中尚无JPA组件支持。请随时就此事提出JIRAJavaDSL组件),我们会关注此需求。也欢迎contribute

同时,我可以帮助您找出如何在没有高级API的情况下做到这一点。我们将用于DSL API的JpaPollingChannelAdapterJpaExecutor对象。你只是必须为JpaExecutor配置@Bean和使用它像这样:

@Bean 
public JpaExecutor jpaExecutor(EntityManagerFactory entityManagerFactory) { 
    JpaExecutor jpaExecutor = new JpaExecutor(entityManagerFactory); 
    jpaExecutor.setJpaQuery("from Foo"); 
    .... 
    return jpaExecutor; 
} 

@Bean 
public IntegrationFlow jpaFlow(JpaExecutor jpaExecutor) { 
    return IntegrationFlows.from(new JpaPollingChannelAdapter(jpaExecutor)) 
         .split() 
         .transform() 
     .... 
} 

一切将通过框架来完成像往常一样对现有的DSL组件API。

UPDATE

编程方式创建JpaPollingChannelAdapter时如何提供自动启动=财产?另外,是否有可能获得这个bean并使用控制总线调用.start(),.stop()?

查看,加里的答案。在我们的案例中,Lifecycle控制是Endpoint的责任,它是SourcePollingChannelAdapter。因此,您应该指定第二个Lambda参数,将.autoStartup().id()配置为可以为您的JpaPollingChannelAdapter注入SourcePollingChannelAdapter,并根据您的目的使用它。 id确实可以在运行时从control-busstart()/stop()使用。

是的,我同意JpaPollingChannelAdapter是该班的不幸名字,因为它实际上是一个MessageSource实施。

+0

在JIRA中引发了新的功能请求。 https://jira.spring.io/browse/INTEXT-20 –

+0

如何在编程创建'JpaPollingChannelAdapter'时提供'auto-startup ='属性?另外,是否可以使用控制总线获取这个bean并调用'.start()','.stop()'? – kisileno

+1

请在我的答案中查看UPDATE。 –

相关问题