내 서비스 클래스. 내 컨트롤러, 서비스 방법 blockAllDevices에서스프링 트랜잭션 관리 Propagation.REQUIRES_NEW not working
@Service
@Transactional(value = "transactionManager", readOnly = true, propagation = Propagation.REQUIRED)
public class DeviceServiceImpl{
@Transactional(readOnly = false)
public void blockAllDevices(){
createSmsDeviceBlock();
}
public void createSmsDeviceBlock(){
addToLogTables();
smsService.sendSms();
}
@Transactional(readOnly = false,propagation = Propagation.REQUIRES_NEW)
public void addToLogTables(){
try {
//save object with DAO methods...
} catch (Exception e) {
throw new ServiceException(ServiceException.PROCESSING_FAILED, e.getMessage(), e);
}
}
}
()가 호출하기. addToLogTables() 메소드가 Propergation.REQUIRED_NEW로 표시되었지만 addToLogTables() 메소드에 문제가 발생하여 새 트랜잭션이 생성되지 않고 기존 트랜잭션이 사용 중입니다.
smsService.sendSms() 메소드를 실행하기 전에 addToLogTables() 메소드의 트랜잭션을 커밋해야합니다.
여기 내 문제는 트랜잭션이 커밋되지 않은 경우 addToLogTables() 메서드의 메서드에서 smsService.sendSms() 메서드를 실행하지 않아야합니다.
이 내용을 이해할 수는 있지만이를 수행 할 수있는 대안이 있습니까? 동일한 트랜잭션 내에서 새 트랜잭션을 생성합니다. –
트랜잭션 메소드가 다른 빈에 삽입되도록 외부 또는 redactor에서 호출해야합니다. –
AspectJ 기반의 트랜잭션 관리를 로딩 타임이나 컴파일 타임 짜기 및 스프링 애스펙트와 함께 사용할 수있다. 트랜잭션 자체 호출, 개인 트랜잭션 메소드 등을 가질 수있다. 자세한 정보는 Spring 문서를 보라. – Jukka