이 사용 사례가 있습니다.스프링 통합 : 2 명의 액티베이터간에 트랜잭션이 어려움
첫 번째 체인 : 모든 위대한 노력
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public EventMessage<ModificaOperativitaRapporto> activate(EventMessage<InserimentoCanale> eventMessage) {
...
// some Database changes
dao.save(myObject);
}
:
<int:chain input-channel="inserimentoCanaleActivate" output-channel="inserimentoCanalePreRouting">
<int:service-activator ref="inserimentoCanaleActivator" method="activate" />
</int:chain>
이 상대적 코드입니다. 스플리터 I로되도록
@Override
public EventMessage<CensimentoCliente> activate(EventMessage<CensimentoCliente> eventMessage) {
...
// some Database changes
dao.save(myObject);
}
후술하는 바와 같이 CensimentoCliente
페이로드는 제 체인의 페이로드의 List
있습니다
<int:chain id="onlineCensimentoClienteChain" input-channel="ONLINE_CENSIMENTO_CLIENTE" output-channel="inserimentoCanaleActivate">
<int:service-activator ref="onlineCensimentoClienteActivator" method="activate" />
<int:splitter expression="payload.getPayload().getCanali()" />
</int:chain>
상대 활성제 : 다음
I 다른 체인을 목록에서 분리하고 첫 번째 체인의 코드를 다시 사용하십시오.
public interface CensimentoCliente extends Serializable {
Collection<? extends InserimentoCanale> getCanali();
void setCanali(Collection<? extends InserimentoCanale> canali);
...
}
그러나
모든 활성 나는 트랜잭션이 분리되어 사용 사례를 (첫 번째는 두 번째 없이는 살 수 있기 때문에) 자신의 트랜잭션 정의를 얻을 수 있기 때문이다.목표는 두 트랜잭션 체인의 db 수정을 수행하는 것입니다.
어떤 도움이 필요합니까?
종류는 마시모
혹시 해결책을 찾았나요 관한 조금 명확히하기 위해? – dMcNavish
아니요 ........... –