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à:
- 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 đó)
- 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 ạ!
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.setReadonly
làPuts 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.Cảm ơn anh đã chia sẻ !