具有事务轮询器Java配置的Spring Integration JPA入站通道适配器

时间:2019-07-26 05:03:08

标签: java spring-boot spring-data-jpa spring-integration

我正在尝试使用spring集成jpa-inbound-channel-adapter从数据库中获取记录并对其执行一组操作。我还需要确保并发运行的实例在任何给定的时间点都不会多次获得相同的记录。

当我查看以下文档时,如何配置jpa-inbound-channel-adapter来处理事务,

<int-jpa:inbound-channel-adapter
    channel="inboundChannelAdapterOne"
    entity-manager="em"
    auto-startup="true"
    jpa-query="select s from Student s"
    expect-single-result="true"
    delete-after-poll="true">
    <int:poller fixed-rate="2000" >
        <int:transactional propagation="REQUIRED"
            transaction-manager="transactionManager"/>
    </int:poller>
</int-jpa:inbound-channel-adapter>

我还没有找到在Spring Boot应用程序中使用Java配置(没有xml配置)实现相同目的的任何方法。我可以看到Java配置示例,但没有一个带有事务性。任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:0)

请参见the configuration for the test cases

只需将.transactional()添加到端点:

    @Bean
    public IntegrationFlow pollingAdapterFlow(EntityManagerFactory entityManagerFactory) {
        return IntegrationFlows
                .from(Jpa.inboundAdapter(entityManagerFactory)
                                .entityClass(StudentDomain.class)
                                .maxResults(1)
                                .expectSingleResult(true),
                        e -> e.poller(p -> p.trigger(new OnlyOnceTrigger())
                                .transactional()))
                .channel(c -> c.queue("pollingResults"))
                .get();
    }