Chien Java Template là một skeleton/template hoàn chỉnh cho việc phát triển ứng dụng Java Spring Boot với cấu trúc tổ chức rõ ràng, best practices, và các thành phần cần thiết cho một ứng dụng doanh nghiệp.
src/main/java/com/example/chien_java_template/
├── config/ # Cấu hình ứng dụng
│ ├── SecurityConfig.java
│ ├── JwtAuthenticationEntryPoint.java
│ └── JwtAccessDeniedHandler.java
├── controller/ # REST Controllers
│ ├── AuthController.java
│ └── UserController.java
├── dto/ # Data Transfer Objects
│ ├── request/
│ │ ├── UserLoginRequest.java
│ │ └── ChangePasswordRequest.java
│ ├── response/
│ │ ├── AuthResponse.java
│ │ └── PageResponse.java
│ ├── UserDTO.java
│ ├── CreateUserDTO.java
│ ├── UpdateUserDTO.java
│ └── PaginationDTO.java
├── enums/ # Enumerations
│ ├── AuthProvider.java
│ ├── UserRole.java
│ └── SortDirection.java
├── exception/ # Exception handling
│ ├── AppException.java
│ ├── ErrorCode.java
│ ├── ApiResponse.java
│ └── GlobalExceptionHandle.java
├── mapper/ # MapStruct Mappers
│ └── UserMapper.java
├── model/ # JPA Entities
│ └── User.java
├── repository/ # Data Access Layer
│ └── UserRepository.java
├── service/ # Business Logic
│ ├── AuthService.java
│ ├── UserService.java
│ ├── JwtService.java
│ └── GoogleTokenVerifier.java
├── utils/ # Utilities
│ ├── Constants.java
│ └── ValidationUtils.java
└── ChienJavaTemplateApplication.java
- Spring Boot 4.0.3 - Nền tảng ứng dụng
- Java 21 - Ngôn ngữ lập trình
- Spring Security - Bảo mật
- Spring Data JPA - ORM
- Lombok 1.18.32 - Giảm boilerplate code
- MapStruct 1.5.5.Final - DTO mapping
- JWT (Nimbus Jose) 9.31 - Token quản lý
- Google API Client 2.4.0 - Google OAuth
- Spring Data Redis - Caching với Redis
- SQL Server - Database chính
- Maven - Build tool
- Maven Compiler Plugin 3.11.0 - Java compilation
- Java 21 trở lên
- Maven 3.8.0 trở lên
- SQL Server
- Clone dự án
git clone https://github.com/yourusername/chien-java-template.git
cd chien-java-template- Cấu hình database
Chỉnh sửa file
src/main/resources/application.yaml:
spring:
datasource:
url: jdbc:sqlserver://localhost:1433;databaseName=your_db
username: your_username
password: your_password- Cấu hình JWT
Thêm vào
application.yaml:
jwt:
secretKey: your_secret_key_here- Cấu hình Google OAuth
Thêm vào
application.yaml:
google:
clientId: your_google_client_id- Cấu hình Redis (nếu sử dụng)
spring:
redis:
host: localhost
port: 6379- Build và chạy
mvn clean install
mvn spring-boot:runỨng dụng sẽ chạy tại: http://localhost:8080
POST /api/v1/auth/login- Đăng nhậpPOST /api/v1/auth/google-login- Đăng nhập với GooglePOST /api/v1/auth/refresh- Làm mới tokenPOST /api/v1/auth/logout- Đăng xuất
POST /api/v1/users- Tạo user mớiGET /api/v1/users- Lấy danh sách usersGET /api/v1/users/{id}- Lấy user theo IDGET /api/v1/users/email/{email}- Lấy user theo emailPUT /api/v1/users/{id}- Cập nhật userDELETE /api/v1/users/{id}- Xóa userPUT /api/v1/users/{id}/activate- Kích hoạt userPUT /api/v1/users/{id}/deactivate- Vô hiệu hóa user
- JWT Authentication - Token-based authentication
- Password Encryption - BCrypt password hashing
- OAuth 2.0 - Google login support
- CORS Configuration - Cross-origin request handling
- Role-based Access Control - RBAC implementation
- Token Refresh - Automatic token refresh mechanism
- id: Long (Primary Key)
- email: String (Unique, Required)
- password: String (Hashed)
- fullName: String (Required)
- username: String (Unique)
- phoneNumber: String
- avatar: String
- role: String (USER, ADMIN, etc.)
- isActive: Boolean (default: true)
- provider: String (LOCAL, GOOGLE, FACEBOOK)
- providerId: String
- createdAt: LocalDateTime (Auto)
- updatedAt: LocalDateTime (Auto)
- lastLoginAt: LocalDateTime
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}- Secret Key: Để lại trong
application.yaml - Access Token: 15 phút
- Refresh Token: 7 ngày
- Algorithm: HS256
- Cho phép tất cả origins (có thể cấu hình trong
SecurityConfig)
User table sẽ được tạo tự động từ User entity với các columns:
idBIGINT (PK, AUTO_INCREMENT)emailVARCHAR(255) (UNIQUE, NOT NULL)passwordVARCHAR(255) (NOT NULL)full_nameVARCHAR(255) (NOT NULL)usernameVARCHAR(50) (UNIQUE)phone_numberVARCHAR(20)avatarVARCHAR(500)roleVARCHAR(50) (NOT NULL)is_activeBIT (DEFAULT 1)providerVARCHAR(50)provider_idVARCHAR(255)created_atDATETIME (NOT NULL)updated_atDATETIME (NOT NULL)last_login_atDATETIME
Run tests với:
mvn test| Dependency | Version | Mục Đích |
|---|---|---|
| Spring Boot | 4.0.3 | Framework |
| Spring Security | Latest | Authentication & Authorization |
| Spring Data JPA | Latest | ORM |
| Spring Data Redis | Latest | Caching |
| Lombok | 1.18.32 | Reduce boilerplate |
| MapStruct | 1.5.5.Final | DTO Mapping |
| Nimbus JOSE+JWT | 9.31 | JWT handling |
| Google API Client | 2.4.0 | OAuth |
| SQL Server JDBC | Latest | Database driver |
| Validation | Latest | Input validation |
✅ Layered Architecture - Separation of concerns
✅ DTO Pattern - Data transfer objects
✅ Mapper Pattern - Entity-DTO conversion
✅ Exception Handling - Global exception handling
✅ Logging - SLF4J logging
✅ Validation - Input validation
✅ Security - JWT + OAuth
✅ Configuration - Externalized configuration
✅ Pagination - Pagination support
✅ Documentation - API documentation ready
Bước 1: Tạo Entity trong model/
@Entity
public class Product {
// fields
}Bước 2: Tạo Repository trong repository/
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}Bước 3: Tạo DTOs trong dto/
public class ProductDTO { }
public class CreateProductDTO { }Bước 4: Tạo Mapper trong mapper/
@Mapper(componentModel = "spring")
public interface ProductMapper { }Bước 5: Tạo Service trong service/
@Service
public class ProductService { }Bước 6: Tạo Controller trong controller/
@RestController
public class ProductController { }Sử dụng AppException với ErrorCode:
throw new AppException(ErrorCode.USER_NOT_FOUND);Sử dụng ValidationUtils:
if (!ValidationUtils.isValidEmail(email)) {
throw new AppException(ErrorCode.INVALID_EMAIL_FORMAT);
}- ✅ User registration & authentication
- ✅ JWT token management
- ✅ Google OAuth integration
- ✅ Password hashing
- ✅ Role-based access control
- ✅ User activation/deactivation
- ✅ Last login tracking
- ✅ Global exception handling
- ✅ Pagination support
- ✅ DTO mapping
- Email verification
- Two-factor authentication
- API rate limiting
- Audit logging
- File upload handling
- WebSocket support
- Cache management
- Elasticsearch integration
Để được hỗ trợ, vui lòng tạo issue hoặc liên hệ: [your-email@example.com]
MIT License
Chien - Java Developer
Last Updated: February 2026
Version: 1.0.0