共計 1070 個字符,預計需要花費 3 分鐘才能閱讀完成。
在 Java 中,@Transactional 是一個注解,用于指示方法應該在事務中執行。它可以應用于類級別或方法級別。
在類級別上使用 @Transactional 注解時,對類中的所有方法都將應用事務。這意味著類中的每個方法都將被包裝在一個事務中,并且當其中一個方法調用另一個方法時,它們將在同一個事務中執行。
在方法級別上使用 @Transactional 注解時,只有被注解的方法將在事務中執行。這允許您有選擇地將某些方法包裝在事務中,而其他方法則不會。
@Transactional 注解可以使用不同的屬性來定義事務的行為,例如傳播行為、隔離級別、超時等。一些常用的屬性包括:
- propagation:定義事務的傳播行為,即在方法調用鏈中如何處理事務。例如,REQUIRES_NEW 表示每次調用都會創建一個新的事務。
- isolation:定義事務的隔離級別,即在并發情況下如何處理事務。常用的隔離級別有 READ_COMMITTED 和 SERIALIZABLE。
- timeout:定義事務的超時時間,即事務在多長時間后如果沒有提交就會自動回滾。
- readOnly:指示事務是否為只讀事務。如果事務只涉及讀取操作,可以將其設置為 true 以提高性能。
以下是一個使用 @Transactional 注解的示例:
@Service
@Transactional
public class ProductService {
@Autowired
private ProductRepository productRepository;
public void createProduct(Product product) {productRepository.save(product);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateProduct(Product product) {productRepository.save(product);
}
@Transactional(readOnly = true)
public Product getProductById(Long id) {return productRepository.findById(id).orElse(null);
}
}
在上面的示例中,createProduct 方法和 getProductById 方法將在同一個事務中執行。updateProduct 方法將在一個新的事務中執行,即使它被 createProduct 方法調用。
丸趣 TV 網 – 提供最優質的資源集合!
正文完
發表至: Java
2024-02-01