126 bài viết

Boot 3 mặc định chỉ lộ health; bản đồ endpoint an toàn và nguy hiểm; HealthIndicator tự viết với liveness tách khỏi readiness cho Kubernetes, info từ build và git, metrics Micrometer với tag hữu hạn — và ba lớp khóa: cổng riêng, SecurityFilterChain với EndpointRequest, exclude env/heapdump/threaddump.

Optional là công cụ cho kiểu trả về — không field, không tham số, không bọc collection; chuỗi map/flatMap/filter thay kim tự tháp if; orElse luôn tính tham số còn orElseGet lười, orElseThrow cho “không có là lỗi” — và các anti-pattern isPresent + get, orElse(null).

Fesod là hậu duệ của EasyExcel, cùng engine SAX/SXSSF. Khác biệt kiểm chứng được: vòng đời dự án, POI 5.2.5 vs 5.5.1, các API mới (numRows, csv(), headerMergeStrategy) và độ bền với file xấu — không phải hiệu năng gấp nhiều lần.

Builder với mặc định hợp lệ để test chỉ nói điều nó quan tâm, @TestComponent gói builder với repository, @Sql cho dữ liệu nhiều hay legacy với bẫy method ghi đè class, ba bẫy script SQL — và chiến lược dọn dẹp: rollback, TRUNCATE trước mỗi test, dữ liệu duy nhất, còn @DirtiesContext thì không.

Ba bẫy của toMap — trùng khóa, giá trị null, kiểu map; groupingBy với downstream counting/summingInt/mapping và gom nhiều cấp bằng record; partitioningBy luôn đủ hai khóa; filtering giữ nhóm rỗng, teeing gộp hai collector trong một lượt, collectingAndThen gỡ Optional của maxBy.

@MockitoBean chỉ cho thứ ngoài biên giới và mỗi bộ mock khác nhau là một context mới, @WithMockUser với bẫy roles và authorities, jwt() test luật phân quyền mà không cần token thật — và kim tự tháp test cho security.

Năm họ phép kết thúc nhận ra bằng kiểu trả về, stream chỉ dùng một lần, reduce với identity trung hòa và collect cho container, toList() không sửa được — và vì sao allMatch trả true trên tập rỗng còn findAny không hứa trả phần tử đầu.

Phụ thuộc thật trong Docker thay vì thứ gần giống, @ServiceConnection biến sáu dòng cấu hình thành một annotation, một container cho cả bộ test — và bức tranh khép lại năm ngày kiểm thử.