Java Project Structure
A scalable and maintainable folder structure for Java applications
File Structure
- src
- main
- java
- com
- example
- myapp
- Application.java
- config
- DatabaseConfig.java
- SecurityConfig.java
- controller
- UserController.java
- AuthController.java
- service
- UserService.java
- AuthService.java
- impl
- UserServiceImpl.java
- model
- User.java
- Role.java
- repository
- UserRepository.java
- RoleRepository.java
- dto
- UserDto.java
- CreateUserRequest.java
- exception
- UserNotFoundException.java
- GlobalExceptionHandler.java
- util
- DateUtils.java
- ValidationUtils.java
- resources
- application.yml
- application-dev.yml
- application-prod.yml
- static
- templates
- db
- migration
- test
- java
- com
- example
- myapp
- controller
- UserControllerTest.java
- service
- UserServiceTest.java
- repository
- UserRepositoryTest.java
- resources
- application-test.yml
- docs
- api.md
- deployment.md
- pom.xml
- Dockerfile
- .gitignore
- README.md
Directory Structure Explanation
config/
Contains configuration classes for Spring Boot, security, and database setup.
service/impl/
Contains implementation classes for service interfaces, following separation of concerns.
dto/
Data Transfer Objects for API requests and responses, separate from entity models.
exception/
Contains custom exception classes and global exception handling logic.
util/
Contains utility classes with static helper methods used across the application.
application.yml
YAML configuration file providing more readable format than properties files.
application-dev.yml
Development environment specific configuration settings.
resources/db/migration/
Database migration scripts for version control of database schema changes.
test/resources/
Test-specific configuration files and resources separate from main application.
Dockerfile
Docker configuration for containerizing the Java application.