Spring Boot REST API for the ByteChronicle blogging platform.
- Java 17 - Modern Java features and performance
- Spring Boot 3.2 - Enterprise-grade framework
- Spring Data JPA - Data persistence layer
- Spring Web - RESTful web services
- H2 Database - In-memory database for development
- MuSQL Database - Relational database for production
- Maven - Dependency management and build tool
- Hibernate - ORM framework
- Jackson - JSON serialization/deserialization
- Navigate to backend directory
cd backend
- Run the application
./mvnw spring-boot:run
- Alternative: Build and run JAR
./mvnw clean package java -jar target/blog-backend-0.0.1-SNAPSHOT.jar
The application runs on http://localhost:8080
by default.
Key configuration in application.properties
:
server.port=8080
spring.datasource.url=jdbc:mysql://${DB_HOST:}:${DB_PORT:}/${DB_NAME:}
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.username=${DB_USERNAME:}
spring.datasource.password=${DB_PASSWORD:}
GET /api/blogs # Get all blogs (paginated)
GET /api/blogs/{id} # Get blog by ID
POST /api/blogs # Create new blog
PUT /api/blogs/{id} # Update existing blog
DELETE /api/blogs/{id} # Delete blog
GET /api/blogs/search?keyword={keyword} # Search blogs
GET /api/blogs/tags # Get all unique tags
GET /api/blogs/tag/{tag} # Get blogs by tag
POST /api/blogs/sample # Load sample blog posts
Blog Entity:
@Entity
public class Blog {
private Long id;
private String title;
private String content;
private String summary;
private String author;
private List<String> tags;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
backend/
├── src/main/java/com/bytechronicle/blog/
│ ├── BlogApplication.java # Main application class
│ ├── controller/
│ │ └── BlogController.java # REST endpoints
│ ├── model/
│ │ └── Blog.java # Blog entity
│ ├── repository/
│ │ └── BlogRepository.java # Data access layer
│ └── service/
│ └── BlogService.java # Business logic
├── src/main/resources/
│ ├── application.properties # Configuration
│ └── data.sql # Sample data (optional)
└── pom.xml # Maven dependencies
./mvnw clean package -DskipTests
# Get all blogs
curl http://localhost:8080/api/blogs
# Create a new blog
curl -X POST http://localhost:8080/api/blogs \
-H "Content-Type: application/json" \
-d '{
"title": "My First Blog",
"content": "This is the content of my first blog post.",
"summary": "A brief summary",
"author": "John Doe",
"tags": ["tech", "programming"]
}'
# Search blogs
curl "http://localhost:8080/api/blogs/search?keyword=programming"
Logs are configured in application.properties
:
logging.level.com.bytechronicle.blog=DEBUG
logging.level.org.springframework.web=INFO
FROM openjdk:17-jdk-slim
COPY target/blog-backend-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]