我的轮询器从数据库中提取数据并将其传递给服务激活器。 如果在服务激活器方法中发生任何异常,我应该将获取的数据回滚到其先前的状态,并且应该再次将相同的数据发送到服务激活器,仅用于特定的重试计数(比如3)。 **是否可以在xml配置中执行此操作。 ?有关详细信息,我将共享轮询器配置和服务激活器。 的 poller.xml
<int-jdbc:inbound-channel-adapter id="datachannel"
query="select loyalty_id,process_id,mobile_uid from TBL_RECEIPT where r_cre_time
=(select min(r_cre_time) from TBL_RECEIPT where receipt_status=0)"
data-source="dataSource" max-rows-per-poll="1"
update="update TBL_RECEIPT set receipt_status=11 where process_id in (:process_id)">
<int:poller fixed-rate="5000">
<int:transactional/>
</int:poller>
</int-jdbc:inbound-channel-adapter>
<int:channel id="errors">
<int:queue/>
</int:channel>
<bean id="poller" class="main.java.com.as.poller.PollerService" />
<int:channel id="executerchannel">
<int:dispatcher task-executor="taskExecutor" />
</int:channel>
<task:executor id="taskExecutor" pool-size="2" />
<int:service-activator input-channel="datachannel"
output-channel="executerchannel" ref="poller" method="getRecordFromPoller">
<int:request-handler-advice-chain>
<int:retry-advice recovery-channel="errors" />
</int:request-handler-advice-chain>
</int:service-activator>
<int:service-activator input-channel="executerchannel"
ref="poller" method="getDataFromExecuterChannel">
</int:service-activator>
&#13;
服务激活方法
@SuppressWarnings({ "unchecked", "rawtypes" })
@ServiceActivator
public void processMessage(Message message) throws IOException {
int capLimit = Integer.parseInt(env.getProperty("capping_limit"));
List<Map<String, Object>> rows = (List<Map<String, Object>>) message
.getPayload();
for (Map<String, Object> row : rows) {
String loyaltyId = (String) row.get("loyalty_id");
String processId = (String) row.get("process_id");
String xid=(String)row.get("mobile_uid");
&#13;
我听说过int:在poller配置中使用的事务。但是当我添加它时,即使在成功事务之后它也会获取相同的记录。(意味着它每次都会回滚)。 有人可以帮我这个吗?
答案 0 :(得分:0)
您可以向服务激活器添加retry request-handler-advice。
要使重试有状态(抛出异常以便事务将回滚),您需要提供RetryStateGenerator
。否则,线程将在重试期间暂停。
无论使用有状态还是无状态重试,您都应该使用事务轮询器,以便仅在成功后应用更新。
表示每次都会回滚
事务轮询器仅在抛出异常时才会回滚。因此,如果您看到同一行,则必须失败。
启用所有org.springframework
的DEBUG日志记录,以关注消息流和事务活动。