# java-techie-jt/spring-virtual-thead architecture

> Architecture diagram of the GitHub repository java-techie-jt/spring-virtual-thead, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/java-techie-jt/spring-virtual-thead
- Repository: https://github.com/java-techie-jt/spring-virtual-thead

## Overview

This Spring Boot service generates regional customer CSV reports through three modes: a direct request-thread path, a fixed platform-thread pool, and a virtual-thread executor. Each mode queries customers by region and writes a mode-prefixed CSV under `reports/`; the asynchronous modes acknowledge the request before report work completes. The README only summarizes results, so the database’s identity and configuration cannot be established from the sampled files.

Main entry points: [`src/main/java/com/javatechie/controller/ReportController.java`](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/controller/ReportController.java) (Report controller), [`src/main/java/com/javatechie/repository/CustomerRepository.java`](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/repository/CustomerRepository.java) (Customer repository), [`src/main/java/com/javatechie/service/VirtualReportService.java`](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/service/VirtualReportService.java) (Virtual reports), [`src/main/java/com/javatechie/util/CsvReportUtil.java`](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/util/CsvReportUtil.java) (CSV writer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_controller["Report controller"]
end

subgraph group_execution["Report execution"]
  node_direct["Direct reports<br/>[ReportService.java]"]
  node_platform["Platform reports"]
  node_virtual["Virtual reports"]
  node_executor["Virtual executor"]
end

subgraph group_data["Data and output"]
  node_repository["Customer repository"]
  node_customer["Customer entity<br/>[Customer.java]"]
  node_database[("Customer database")]
  node_csv["CSV writer<br/>[CsvReportUtil.java]"]
  node_reports[("Report files")]
end

node_caller(("API caller"))

node_caller -->|"posts region"| node_controller
node_controller -->|"invokes"| node_direct
node_controller -->|"invokes"| node_platform
node_controller -->|"invokes"| node_virtual
node_controller -->|"returns status"| node_caller
node_direct -->|"queries region"| node_repository
node_platform -->|"queries region"| node_repository
node_virtual -->|"queries region"| node_repository
node_repository -->|"reads customers"| node_database
node_repository -->|"returns records"| node_customer
node_direct -->|"writes report"| node_csv
node_platform -->|"writes report"| node_csv
node_virtual -->|"writes report"| node_csv
node_csv -->|"writes CSV"| node_reports
node_virtual -->|"dispatches task"| node_executor

click node_controller "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/controller/ReportController.java"
click node_direct "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/service/ReportService.java"
click node_platform "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/service/PlatformReportService.java"
click node_virtual "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/service/VirtualReportService.java"
click node_executor "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/config/VirtualThreadExecutorConfig.java"
click node_repository "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/repository/CustomerRepository.java"
click node_customer "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/entity/Customer.java"
click node_csv "https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/util/CsvReportUtil.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_controller toneBlue
class node_direct,node_platform,node_virtual,node_executor toneAmber
class node_repository,node_customer,node_database,node_csv,node_reports,node_caller toneMint
```

## Components

### HTTP API

- [Report controller](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/controller/ReportController.java): `src/main/java/com/javatechie/controller/ReportController.java`

### Report execution

- [Direct reports](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/service/ReportService.java): `src/main/java/com/javatechie/service/ReportService.java`
- [Platform reports](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/service/PlatformReportService.java): `src/main/java/com/javatechie/service/PlatformReportService.java`
- [Virtual reports](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/service/VirtualReportService.java): `src/main/java/com/javatechie/service/VirtualReportService.java`
- [Virtual executor](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/config/VirtualThreadExecutorConfig.java): `src/main/java/com/javatechie/config/VirtualThreadExecutorConfig.java`

### Data and output

- [Customer repository](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/repository/CustomerRepository.java): `src/main/java/com/javatechie/repository/CustomerRepository.java`
- [Customer entity](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/entity/Customer.java): `src/main/java/com/javatechie/entity/Customer.java`
- **Customer database**
- [CSV writer](https://github.com/java-techie-jt/spring-virtual-thead/blob/main/src/main/java/com/javatechie/util/CsvReportUtil.java): `src/main/java/com/javatechie/util/CsvReportUtil.java`
- **Report files**

### Other components

- **API caller**

## Connections

- API caller → Report controller: posts region
- Report controller → Direct reports: invokes
- Report controller → Platform reports: invokes
- Report controller → Virtual reports: invokes
- Report controller → API caller: returns status
- Direct reports → Customer repository: queries region
- Platform reports → Customer repository: queries region
- Virtual reports → Customer repository: queries region
- Customer repository → Customer database: reads customers
- Customer repository → Customer entity: returns records
- Direct reports → CSV writer: writes report
- Platform reports → CSV writer: writes report
- Virtual reports → CSV writer: writes report
- CSV writer → Report files: writes CSV
- Virtual reports → Virtual executor: dispatches task
