#Proxy
6 bài viết.
Hai method, hai @Transactional - mà chỉ một transaction để chết chung
@Transactional không nói mở transaction, nó nói method này cần chạy trong một transaction. Quyền quyết định nằm ở cái vỏ, và cái vỏ thò tay vào túi của thread.
Ném exception mà dữ liệu vẫn được commit
Cái vỏ có đó, lời gọi có đi qua nó, mà vẫn không rollback: bảng luật mặc định của Spring chỉ rollback với unchecked exception.
@Cacheable không cache - rồi khi cache được, nó trả nhầm đồ của người khác
Cache cũng chỉ là một cái Map, và khoá mặc định của nó chỉ gồm tham số. Hai method khác nhau cùng cacheNames là cùng một ô.
@Async của tôi chạy tuần tự như thường
Thiếu một dòng bật tính năng thì annotation chỉ còn là lời khai không ai đọc. Và khi nó chạy được rồi, exception lại chết ở một thread khác.
@Transactional gọi từ chính class mình lại không chạy
Lời gọi từ trong chính class không đi ra ngoài cái vỏ, nên không ai kịp làm gì cả. Bài này giải thích vì sao đừng bao giờ tin this.
getClass() của tôi in ra `$$SpringCGLIB$$`, tôi có làm hỏng gì không?
Vật được trao không phải vật bạn tưởng: vì sao Spring Boot đúc proxy bằng CGLIB kể cả khi đã có interface, và vì sao method final làm @Transactional bốc hơi.