Spring Transaction Management @ Транзакционное поведение - PullRequest
0 голосов
/ 08 апреля 2020

Я хотел знать, как Spring @Transactional будет работать для следующего сценария кодирования ios. Для этого примера я использую Spring 4 + Hiberante 5 с базой данных Oracle 19 C.

Пример 1:

@Service
public class UserService {
    @Transactional(readOnly = true)
    public void invoice() {
        createPdf();
        // send invoice as email, etc.
    }
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void createPdf() {
        // ...
    }
}

Пример 2 :

@Service
public class UserService {
    @Autowired
    private InvoiceService invoiceService;
    @Transactional(readOnly = true)
    public void invoice() {
        invoiceService.createPdf();
        // send invoice as email, etc.
    }
}
@Service
public class InvoiceService {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void createPdf() {
        // ...
    }
}

Спасибо

1 Ответ

1 голос
/ 08 апреля 2020

Пример 1 : поскольку вы вызываете метод createPDF из inside вашей службы, аннотация @Transactional (REQUIRES_NEW) будет фактически ignored. Новая транзакция не будет открыта.

Пример 2 : Поскольку вы вызываете другую службу, которая заключена в транзакционный прокси, вы получите new transaction, так как аннотация уважаемый.

Вы также можете прочитать эту статью: Spring Transaction Management: @Transactional In-Depth

...