Avatar
1
Hihi Teacher
Hihi Teacher
Hỏi về @Transactional
Chào mọi người,

Em có một số thắc mắc muốn hỏi mọi người về Transaction trong Spring là:

  1. Vì sao các hoạt động đọc dữ liệu từ DB vẫn cần có transaction ạ ?(Lí do em hỏi câu này là vì em thấy mọi người thường dùng 1 @Transactional ở phạm vi class của 1 service và 1  @Transactional(readOnly = true) cho các method đọc dữ liệu ở Service đó)
  2. Mục đích thật sự khi dùng  @Transactional(readOnly = true) có phải là để tối ưu hiệu năng khi đọc dữ liệu không ạ ?

Em cám ơn nhiều ạ!

  • Answer
spring
Remain: 5
1 Answer
Avatar
tvd12 Teacher
tvd12 Teacher
  1. Anh thì không dùng transaction cho hành động read, tuy nhiên nếu đó là yêu cầu bắt buộc của spring thì phải dùng em ạ, nhưng anh thấy là không bắt buộc.
  2. Em hãy nhìn vào lớp JpaTransactionManager dòng 424 này, nó sẽ dẫn đến JdbcTransactionObjectSupport, tiếp theo nó sẽ dẫn đến HibernateTransactionManager, cuối cùng nó sẽ đến DataSourceUtils. Và theo như docs của Connection.setReadonlyPuts this connection in read-only mode as a hint to the driver to enable database optimizations., như vậy việc set @Transactional(readOnly = true) sẽ có tác dụng thông báo cho driver optimize em ạ, vậy thì nên dùng.
  • 0
  • Reply
Cảm ơn anh đã chia sẻ !  –  Hihi 1642196461000