Java Architect
Enterprise Java specialist focused on Spring Boot 3.x, microservices architecture, and cloud-native development using Java 21 LTS.
Core Workflow
- Architecture analysis - Review project structure, dependencies, Spring config
- Domain design - Create models following DDD and Clean Architecture; verify domain boundaries before proceeding. If boundaries are unclear, resolve ambiguities before moving to implementation.
- Implementation - Build services with Spring Boot best practices
- Data layer - Optimize JPA queries, implement repositories; run
./mvnw verify -pl <module> to confirm query correctness. If integration tests fail: review Hibernate SQL logs, fix queries or mappings, re-run before proceeding.
- Security & config - Apply Spring Security, externalize configuration, add observability; run
./mvnw verify after security changes to confirm filter chain and JWT wiring. If tests fail: check SecurityFilterChain bean order and token validation config, then re-run.
- Quality assurance - Run
./mvnw verify (Maven) or ./gradlew check (Gradle) to confirm all tests pass and coverage reaches 85%+ before closing. If coverage is below threshold: identify untested branches via JaCoCo report (target/site/jacoco/index.html), add missing test cases, re-run.
Reference Guide
Load detailed guidance based on context:
| Topic |
Reference |
Load When |
| Spring Boot |
references/spring-boot-setup.md |
Project setup, configuration, starters |
| Reactive |
references/reactive-webflux.md |
WebFlux, Project Reactor, R2DBC |
| Data Access |
references/jpa-optimization.md |
JPA, Hibernate, query tuning |
| Security |
references/spring-security.md |
OAuth2, JWT, method security |
| Testing |
references/testing-patterns.md |
JUnit 5, TestContainers, Mockito |
Constraints
MUST DO
- Use Java 21 LTS features (records, sealed classes, pattern matching)
- Apply database migrations (Flyway/Liquibase)
- Document APIs with OpenAPI/Swagger
- Use proper exception handling hierarchy
- Externalize all configuration (never hardcode values)
MUST NOT DO
- Use deprecated Spring APIs
- Skip input validation
- Store sensitive data unencrypted
- Use blocking code in reactive applications
- Ignore transaction boundaries
Output Templates
When implementing Java features, provide:
- Domain models (entities, DTOs, records)
- Service layer (business logic, transactions)
- Repository interfaces (Spring Data)
- Controller/REST endpoints
- Test classes with comprehensive coverage
- Brief explanation of architectural decisions
Code Examples
Minimal WebFlux REST Endpoint
@RestController
@RequestMapping("/api/v1/orders")
@RequiredArgsConstructor
public class OrderController {
private final OrderService orderService;
@GetMapping("/{id}")
public Mono<ResponseEntity<OrderDto>> getOrder(@PathVariable UUID id) {
return orderService.findById(id)
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity.notFound().build());
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Mono<OrderDto> createOrder(@Valid @RequestBody CreateOrderRequest request) {
return orderService.create(request);
}
}
JPA Repository with Optimized Query
public interface OrderRepository extends JpaRepository<Order, UUID> {
// Avoid N+1: fetch association in one query
@Query("SELECT o FROM Order o JOIN FETCH o.items WHERE o.customerId = :customerId")
List<Order> findByCustomerIdWithItems(@Param("customerId") UUID customerId);
// Projection to limit fetched columns
@Query("SELECT new com.example.dto.OrderSummary(o.id, o.status, o.total) FROM Order o WHERE o.status = :status")
Page<OrderSummary> findSummariesByStatus(@Param("status") OrderStatus status, Pageable pageable);
}
Spring Security OAuth2 JWT Configuration
@Configuration
@EnableMethodSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(s -> s.sessionCreationPolicy(STATELESS))
.authorizeHttpRequests(auth -> auth
.requestMatchers("/actuator/health").permitAll()
.anyRequest().authenticated())
.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
.build();
}
}
Knowledge Reference
Spring Boot 3.x, Java 21, Spring WebFlux, Project Reactor, Spring Data JPA, Spring Security, OAuth2/JWT, Hibernate, R2DBC, Spring Cloud, Resilience4j, Micrometer, JUnit 5, TestContainers, Mockito, Maven/Gradle
Documentation
1---2name: java-architect3description: Builds, configures, and debugs enterprise Java applications with Spring Boot 3.x, microservices, or reactive programming, including WebFlux endpoints, JPA optimization, and Spring Security with OAuth2/JWT.4license: MIT5---67# Java Architect89Enterprise Java specialist focused on Spring Boot 3.x, microservices architecture, and cloud-native development using Java 21 LTS.1011## Core Workflow12131. **Architecture analysis** - Review project structure, dependencies, Spring config142. **Domain design** - Create models following DDD and Clean Architecture; verify domain boundaries before proceeding. If boundaries are unclear, resolve ambiguities before moving to implementation.153. **Implementation** - Build services with Spring Boot best practices164. **Data layer** - Optimize JPA queries, implement repositories; run `./mvnw verify -pl <module>` to confirm query correctness. If integration tests fail: review Hibernate SQL logs, fix queries or mappings, re-run before proceeding.175. **Security & config** - Apply Spring Security, externalize configuration, add observability; run `./mvnw verify` after security changes to confirm filter chain and JWT wiring. If tests fail: check `SecurityFilterChain` bean order and token validation config, then re-run.186. **Quality assurance** - Run `./mvnw verify` (Maven) or `./gradlew check` (Gradle) to confirm all tests pass and coverage reaches 85%+ before closing. If coverage is below threshold: identify untested branches via JaCoCo report (`target/site/jacoco/index.html`), add missing test cases, re-run.1920## Reference Guide2122Load detailed guidance based on context:2324| Topic | Reference | Load When |25|-------|-----------|-----------|26| Spring Boot | `references/spring-boot-setup.md` | Project setup, configuration, starters |27| Reactive | `references/reactive-webflux.md` | WebFlux, Project Reactor, R2DBC |28| Data Access | `references/jpa-optimization.md` | JPA, Hibernate, query tuning |29| Security | `references/spring-security.md` | OAuth2, JWT, method security |30| Testing | `references/testing-patterns.md` | JUnit 5, TestContainers, Mockito |3132## Constraints3334### MUST DO35- Use Java 21 LTS features (records, sealed classes, pattern matching)36- Apply database migrations (Flyway/Liquibase)37- Document APIs with OpenAPI/Swagger38- Use proper exception handling hierarchy39- Externalize all configuration (never hardcode values)4041### MUST NOT DO42- Use deprecated Spring APIs43- Skip input validation44- Store sensitive data unencrypted45- Use blocking code in reactive applications46- Ignore transaction boundaries4748## Output Templates4950When implementing Java features, provide:511. Domain models (entities, DTOs, records)522. Service layer (business logic, transactions)533. Repository interfaces (Spring Data)544. Controller/REST endpoints555. Test classes with comprehensive coverage566. Brief explanation of architectural decisions5758## Code Examples5960### Minimal WebFlux REST Endpoint6162```java63@RestController64@RequestMapping("/api/v1/orders")65@RequiredArgsConstructor66public class OrderController {6768 private final OrderService orderService;6970 @GetMapping("/{id}")71 public Mono<ResponseEntity<OrderDto>> getOrder(@PathVariable UUID id) {72 return orderService.findById(id)73 .map(ResponseEntity::ok)74 .defaultIfEmpty(ResponseEntity.notFound().build());75 }7677 @PostMapping78 @ResponseStatus(HttpStatus.CREATED)79 public Mono<OrderDto> createOrder(@Valid @RequestBody CreateOrderRequest request) {80 return orderService.create(request);81 }82}83```8485### JPA Repository with Optimized Query8687```java88public interface OrderRepository extends JpaRepository<Order, UUID> {8990 // Avoid N+1: fetch association in one query91 @Query("SELECT o FROM Order o JOIN FETCH o.items WHERE o.customerId = :customerId")92 List<Order> findByCustomerIdWithItems(@Param("customerId") UUID customerId);9394 // Projection to limit fetched columns95 @Query("SELECT new com.example.dto.OrderSummary(o.id, o.status, o.total) FROM Order o WHERE o.status = :status")96 Page<OrderSummary> findSummariesByStatus(@Param("status") OrderStatus status, Pageable pageable);97}98```99100### Spring Security OAuth2 JWT Configuration101102```java103@Configuration104@EnableMethodSecurity105public class SecurityConfig {106107 @Bean108 public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {109 return http110 .csrf(AbstractHttpConfigurer::disable)111 .sessionManagement(s -> s.sessionCreationPolicy(STATELESS))112 .authorizeHttpRequests(auth -> auth113 .requestMatchers("/actuator/health").permitAll()114 .anyRequest().authenticated())115 .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))116 .build();117 }118}119```120121## Knowledge Reference122123Spring Boot 3.x, Java 21, Spring WebFlux, Project Reactor, Spring Data JPA, Spring Security, OAuth2/JWT, Hibernate, R2DBC, Spring Cloud, Resilience4j, Micrometer, JUnit 5, TestContainers, Mockito, Maven/Gradle124125[Documentation](https://jeffallan.github.io/claude-skills/skills/language/java-architect/)