Khi thiết kế API theo chuẩn RESTful, việc đảm bảo tính idempotent (bất biến) là yếu tố then chốt giúp hệ thống ổn định trước các yêu cầu lặp lại — đặc biệt trong môi trường phân tán hoặc có cơ chế retry tự động.
Lỗi BeanCreationException do thiếu JAXB tại thời điểm chạy
Khi nâng cấp lên Java 11+ hoặc sử dụng Spring Boot 2.3+, bạn có thể gặp lỗi sau trong quá trình khởi động ứng dụng:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'springSecurityFilterChain' ...
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
Nguyên nhân: Từ Java 9, module java.xml.bind đã bị loại khỏi JDK mặc định và không còn được đưa vào classpath tự động.
Cách khắc phục: Thêm hai dependency sau vào pom.xml:
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>3.0.2</version>
</dependency>
Lưu ý: Các phiên bản mới nhất (Jakarta EE 9+) sử dụng namespace jakarta.* thay vì javax.*, nên cần đảm bảo tương thích với phiên bản Spring Boot đang dùng.
Lỗi kết nối Eureka Server: "Cannot execute request on any known server"
Khi client không thể đăng ký vào Eureka Server, hãy kiểm tra cấu hình application.yml. Nếu bạn đang chạy một Eureka Server độc lập (ví dụ từ hướng dẫn chính thức của Spring), thì client không cần khai báo defaultZone nếu server đang lắng nghe trên cổng mặc định (8761) và cùng mạng nội bộ.
Ví dụ cấu hình không cần thiết (có thể gây xung đột):
#eureka:
# client:
# service-url:
# defaultZone: http://localhost:8761/eureka/
Hãy gỡ bỏ phần này để client tự động phát hiện qua discovery mechanism mặc định.
Phân biệt giữa eureka-client và starter-eureka-client
Một nguyên nhân phổ biến khiến client không đăng ký thành công là sử dụng sai dependency:
❌ Sai — chỉ cung cấp thư viện lõi, thiếu auto-configuration:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
</dependency>
✅ Đúng — bao gồm toàn bộ starter với các bean tự động cấu hình, actuator integration và điều kiện kích hoạt:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Sự khác biệt nằm ở việc starter tích hợp sẵn EurekaClientAutoConfiguration, bật khả năng discovery và registration mà không cần cấu hình thủ công.