Java · Spring · Thymeleaf
Mình xây backend bằng Java và Spring.
Mình là kỹ sư phần mềm, làm backend với Java và Spring. Blog này là nơi mình ghi lại những gì học được trong lúc làm — pattern dùng được, chỗ hay vấp, và lý do đằng sau một lựa chọn kỹ thuật.
Gõ để tìm kiếm — thử java, spring boot, microservices
Bài viết gần đây
hiển thị 10 / 14-
Microservices e-commerce #7: inventory-service và order-service
Thêm hai service mà sách không có: inventory-service giữ tồn kho, order-service nhận đơn hàng. Trang sản phẩm hiện số lượng còn lại, đơn hàng do server tính tổng tiền, và ba database dùng chung một MySQL mà vẫn tách biệt.
-
Microservices e-commerce #6: MongoDB, MySQL và database-per-service
Thay dữ liệu giả lập bằng database thật: MongoDB cho product và recommendation, MySQL cho review, mỗi service một database riêng. Kèm Spring Data reactive, JPA chạy trên scheduler riêng, MapStruct, test bằng Testcontainers và API tạo, xoá sản phẩm qua composite.
-
Microservices e-commerce #5: tài liệu API với OpenAPI và Swagger UI
Thêm springdoc-openapi cho product-composite: mô tả API ngay trong interface của module api, tách nội dung tài liệu ra file cấu hình, và thử API trực tiếp trên Swagger UI. Khép lại phần nền móng của series.
-
Microservices e-commerce #4: đóng gói bằng Docker, chạy cả hệ thống bằng Docker Compose
Đóng gói bốn microservice thành Docker image theo layer, hiểu JVM nhìn thấy CPU và RAM của container ra sao, chạy cả hệ thống bằng Docker Compose và kiểm tra end-to-end bằng một script bash.
-
Microservices e-commerce #3: review, recommendation và service tổng hợp trang sản phẩm
Thêm review-service, recommendation-service và product-composite-service: gọi ba service song song bằng WebClient và Mono.zip, chuyển lỗi HTTP thành exception, và giữ trang sản phẩm sống khi service phụ sập.
-
Microservices e-commerce #2: service đầu tiên với Spring WebFlux
Tạo product-service: controller viết từ interface dùng chung, Mono của Project Reactor, xử lý lỗi toàn cục, chạy thử bằng curl và kiểm thử với WebTestClient.
-
Microservices e-commerce #1: mình sẽ xây gì, và dựng khung dự án Gradle
Mở đầu series xây một nền tảng thương mại điện tử theo kiến trúc microservices với Spring Boot 3 và Spring Cloud: vì sao chọn microservices, hệ thống trông thế nào, và dựng khung Gradle multi-project với hai module dùng chung.
-
Bảo mật và vận hành một công cụ cầm chìa khóa mọi database
Phần 3 của series Database Backup Utility: credential mã hóa AES-256-GCM chỉ được mở ở một chỗ, secret không bao giờ đi qua argv, một tài khoản operator với lý do rõ ràng, CLI là client của HTTP API, và CI chứng minh mỗi bản release được build từ đúng source.
-
Bảy database engine và một câu hỏi: backup này có restore được không?
Phần 2 của series Database Backup Utility: route backup theo engine mà không giả vờ các engine giống nhau, SHA-256 cho mọi artifact, restore dạng stream, storage profile, và restore thử từng backup trong một database Docker dùng một lần.
-
Xây dựng Database Backup Utility: kiến trúc hexagonal và lát cắt dọc
Phần 1 của series Database Backup Utility: vì sao phạm vi được giữ hẹp, năm Maven module mà ranh giới là lỗi compile, gọi thẳng client gốc của database thay vì JDBC, và cách chạy job nền mà không bao giờ nói dối operator.