【问题标题】:Spring JDBC Adapter in Cluster mode集群模式下的 Spring JDBC Adapter
【发布时间】:2013-08-23 02:34:22
【问题描述】:

我在我的 Web 应用程序中使用 Spring JDBC 入站通道适配器。如果我在集群环境中部署此应用程序,两个或更多实例会拾取相同的作业并运行。 任何人都可以通过更改弹簧配置来帮助克服这个问题吗? 我已经附上了我的弹簧配置。

<int-jdbc:inbound-channel-adapter 
    query=" SELECT JOBID,
                   JOBKEY,
                   JOBPARAM                    
              FROM BATCHJOB 
             WHERE JOBSTATUS = 'A' "  
    max-rows-per-poll="1" channel="inboundAdhocJobTable" data-source="dataSource" 
    row-mapper="adhocJobMapper"
    update=" delete from BATCHJOB where JOBKEY in (:jobKey)"
     >
        <int:poller fixed-rate="1000" >
            <int:advice-chain>              
            </int:advice-chain>
        </int:poller>       

</int-jdbc:inbound-channel-adapter> 

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

    不幸的是,如果没有某种同步,这将是不可能的。此外,将数据库用作某种消息队列并不是一个好主意 (http://mikehadlow.blogspot.de/2012/04/database-as-queue-anti-pattern.html)。我会尝试采用不同的方法:

    1. 使用某种消息总线 + 消息存储来存储作业对象,而不是直接执行 SQL。在这种情况下,您必须更改作业的存储方式。通过使用某种消息存储支持的通道(仅限 Spring 集成)或将它们推送到 RabbitMQ 等消息队列来存储这些作业。
    2. 我不是 100% 确定,但请记住 Spring Batch 提供类似主从作业拆分和同步的功能。也许你去那里看看。

    【讨论】:

    • 感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2017-04-01
    • 1970-01-01
    • 2011-10-11
    • 2021-09-16
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多