Spring @Transactionalが次のコーディングシナリオでどのように機能するかを知りたいと思いました。この例では、Spring 4 + Hiberante 5とOracle 19Cデータベースを使用しています。
例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:inside
サービスからcreatePDFメソッドを呼び出すと、@ Transactional (REQUIRES_NEW)アノテーションは事実上になりますignored
。新しいトランザクションは開かれません。
例2:トランザクションプロキシにラップされた別のサービスを呼び出しているとnew transaction
、アノテーションが順守されるため、を取得します。
この記事を読むこともできます:Spring Transaction Management:@Transactional In-Depth
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加