Spring Boot bài 27: Logging, Actuator và quản lý schema bằng Flyway
- 18-10-2026
- Toanngo92
- 0 Comments
Giáo trình Spring Boot MVC và REST API · Chương 12/12: Quan sát, migration và triển khai · Bài 27/28 · Biên soạn tháng 10/2026.
Mục lục
Mục tiêu bài học
Quan sát ứng dụng đang chạy, công khai health có giới hạn và thay đổi schema bằng migration có phiên bản.
Log phục vụ chẩn đoán một sự kiện cụ thể
Log có ích cho biết ứng dụng đang làm gì và lỗi nào cần xử lý, không phải sao chép toàn bộ request vào console. Dùng logger tham số hóa như log.info("Số khóa học: {}", count) thay vì ghép chuỗi tùy tiện. Chọn mức INFO cho sự kiện vận hành, DEBUG cho chẩn đoán có kiểm soát và ERROR khi cần hành động phù hợp.
Không ghi mật khẩu, Authorization, CSRF token hoặc cookie session. Nếu thêm mã tương quan request, dùng nó để nối sự kiện qua các tầng; không lấy thông tin cá nhân làm mã log. Bật SQL logging chỉ trong môi trường phù hợp vì câu lệnh và tham số có thể chứa dữ liệu nhạy cảm.
Actuator: mở đúng endpoint cần dùng
Starter Actuator cung cấp endpoint vận hành. Mẫu chỉ expose health,info và chỉ công khai /actuator/health; info vẫn chịu quy tắc xác thực chung. Health không hiển thị chi tiết thành phần cho người chưa được phép. Không expose * để tiện kiểm tra rồi để nguyên khi triển khai.
GET /actuator/health trả tín hiệu tổng quan về tình trạng ứng dụng và dependency tham gia health check. Liveness/readiness có mục đích riêng trong môi trường điều phối; cần cấu hình và hiểu trước khi gắn health endpoint vào mọi cơ chế restart. Database chậm không nhất thiết là lý do khởi động lại vô hạn tất cả instance.
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=never
spring.jpa.open-in-view=false
spring.jpa.hibernate.ddl-auto=validate
spring.flyway.enabled=true
Migration là lịch sử thay đổi có thứ tự
V1__create_courses.sql đã tạo schema ban đầu. Khi cần thêm trường, viết V2__…sql thay vì sửa V1 trên database đã chạy. Flyway ghi phiên bản và checksum trong bảng lịch sử, giúp phát hiện nội dung migration bị đổi. Học cách đọc lỗi checksum quan trọng hơn thao tác repair theo thói quen.
Ví dụ V2 dưới chỉ minh họa một thay đổi additive chưa được thêm vào gói mẫu hiện tại. Nếu áp dụng, lưu đúng một tệp migration mới, chạy trên database thử rồi kiểm tra Entity/DTO tương ứng theo nhu cầu. Không dùng clean trên database production và không coi migration đã chạy thành công là có thể hoàn tác dữ liệu tự động.
-- Ví dụ tùy chọn: V2__add_course_summary.sql
ALTER TABLE courses ADD COLUMN summary VARCHAR(500) NULL;
Chuẩn bị trước khi thay đổi dữ liệu thật
Backup cần có khả năng restore đã kiểm tra. Với bảng lớn, thêm chỉ mục hoặc cột có thể khóa hay tốn thời gian; cần xem kế hoạch triển khai trên đúng hệ quản trị. Thay đổi phá vỡ tương thích giữa mã cũ và schema mới nên được chia thành nhiều bước khi cần rolling deployment.
HVC Academy dùng validate để ứng dụng không tự sửa schema khác với migration. Dữ liệu seed được gắn với migration cho mục đích học; hệ thống thật nên phân biệt dữ liệu bắt buộc với dữ liệu demo, tránh vô tình tạo nội dung thử mỗi khi triển khai. Log, health và migration cùng cung cấp bằng chứng để vận hành có kiểm soát.
Lỗi thường gặp và lưu ý
- Không sửa migration đã áp dụng rồi dùng repair chỉ để bỏ qua sai khác chưa hiểu.
- Health endpoint không thay thế đo độ trễ, lỗi request, dung lượng và backup của toàn hệ thống.
Ghi nhớ
Quan sát và thay đổi schema là một phần của ứng dụng; hãy giữ endpoint hẹp, log có ích và migration có lịch sử.

