Thẻ

#spring

99 Ngày Spring — Ngày 41: Kiến trúc Spring Security

Security là chuỗi filter đứng trước controller chứ không nằm trong nó, SecurityContext giữ Authentication trong ThreadLocal, phân biệt authentication 401 với authorization 403 — và bẫy hasRole so với hasAuthority.

6 thg 9, 20266 phút16
99 Ngày Spring — Ngày 40: Tổng kết tối ưu JPA

Checklist bảy vấn đề theo thứ tự đáng sửa trước: N+1 query và ba cách chữa, projection, keyset pagination, index khóa ngoại, transaction gọn, batch ghi — và nguyên tắc đo trước, cache cuối cùng.

5 thg 9, 20267 phút14
99 Ngày Spring — Ngày 39: Soft delete & entity patterns

Soft delete với @SQLDelete và bốn cái bẫy của nó, optimistic locking bằng @Version chống lost update, và mapping enum — vì sao ORDINAL mặc định là cái bẫy nguy hiểm nhất của tầng entity.

4 thg 9, 20269 phút16
99 Ngày Spring — Ngày 38: Nhiều datasource

Khai datasource thứ hai là tắt auto-config: ba bean phải tự dựng cho mỗi DB, @Primary và tách package entity, @Transactional gọi tên manager — cùng giới hạn không trải transaction qua hai database.

3 thg 9, 20268 phút15
99 Ngày Spring — Ngày 37: Redis

Đưa cache ra khỏi tiến trình: spring.cache.type redis và TTL, đổi serializer JDK sang JSON, RedisTemplate cho counter và rate limit, session store dùng chung — cùng bốn cái bẫy khi Redis chết.

2 thg 9, 20268 phút23
99 Ngày Spring — Ngày 36: Caching với @Cacheable

Tốc độ lớn nhất là không truy vấn: cache abstraction với @Cacheable, key SpEL và hai luật sống còn, bộ đôi @CacheEvict/@CachePut giữ cache thật, TTL với Caffeine — và bốn cái bẫy caching.

1 thg 9, 202610 phút10
99 Ngày Spring — Ngày 35: JdbcTemplate & JdbcClient

Khi nào bỏ JPA viết SQL tay: JdbcTemplate với RowMapper và batchUpdate, JdbcClient mới của Boot 3.2 với tham số có tên và tự map record — cùng công thức trộn JPA + JDBC và bẫy flush.

31 thg 8, 20269 phút7
99 Ngày Spring — Ngày 34: Flyway — version hóa schema

Vì sao ddl-auto là thảm họa production, quy ước V__ và flyway_schema_history, ba quy tắc migration (bất biến, nhỏ, expand→contract) — và phân vai chuẩn với JPA.

30 thg 8, 20269 phút5
99 Ngày Spring — Ngày 33: Projection — chỉ lấy cột cần

Chi phí ba tầng của SELECT cả entity, interface projection đổi mỗi kiểu trả về, record projection cho DTO đi xa, dynamic projection — và bẫy open projection.

29 thg 8, 20268 phút11