Production-ready Spring Boot 3 backend for Student Management — Java 17, Docker, MySQL 8, JPA/Hibernate, JWT (access + rotating refresh), and configuration via AWS Secrets Manager on EC2.
I keep detailed, evolving documentation on the development branch while keeping
mainclean and stable.• 👉 Full README: backend README (development)
• Browse branch: development branch
- Secure JWT: short-lived access + rotating refresh tokens
- 12-factor config: secrets in AWS Secrets Manager (no secrets in VCS)
- Dockerized: API and MySQL as separate containers on a private Docker network
- Clean JPA/Hibernate layering (controllers → services → repositories)
- Make sure MySQL 8 is running locally.
- Run the app from your IDE with these environment variables:
# Local laptop/dev
db_sms_url=jdbc:mysql://localhost:3306/<DB_NAME>?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
db_sms_username=<DB_USERNAME>
db_sms_password=<DB_PASSWORD>
sms_app_secret=<JWT_SECRET>
- In program arguments, disable AWS import:
--spring.config.import=
Opening
http://localhost:8080/should return 401 (expected: app is up & secured).
-
EC2 (Ubuntu) with Docker network
smsnetsms_backend(Java 17 JRE image)zeka_tm_qebele_mysql_db(MySQL 8, named volume)
-
Secrets in
prod/sms/backend(AWS Secrets Manager), read via EC2 IAM role -
JDBC points to DB by container name (inside Docker network):
jdbc:mysql://<DB_CONTAINER_NAME>:3306/<DB_NAME>?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
Full step-by-step: see the development README (link above).
I develop on development and merge to main for stable releases.
git switch development
git switch -c feature/some-change
git push -u origin feature/some-change # PR: feature → development → main
This project is licensed under the MIT License — see the LICENSE file for details.