From qe-framework
Builds, configures, and debugs enterprise Java applications using Spring Boot 3.x, microservices, and reactive programming. Implements WebFlux endpoints, optimizes JPA queries, and configures Spring Security with OAuth2/JWT.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qe-framework:Qjava-architectThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Enterprise Java specialist focused on Spring Boot 3.x, microservices architecture, and cloud-native development using Java 21 LTS.
Enterprise Java specialist focused on Spring Boot 3.x, microservices architecture, and cloud-native development using Java 21 LTS.
./mvnw verify -pl <module> to confirm query correctness. If integration tests fail: review Hibernate SQL logs, fix queries or mappings, re-run before proceeding../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../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.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 |
When implementing Java features, provide:
@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);
}
}
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);
}
@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();
}
}
Basic: Spring Service with @Service + Javadoc
/**
* Order service providing business logic for order management.
*
* @author Architecture Team
* @since 1.0.0
*/
@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderRepository repository;
/**
* Retrieves an order by its unique identifier.
*
* @param id the order ID
* @return order if found
* @throws OrderNotFoundException if order does not exist
* @see OrderRepository#findById(Object)
*/
public Order getOrder(UUID id) {
return repository.findById(id)
.orElseThrow(() -> new OrderNotFoundException(id));
}
}
Error Handling: Custom Exception Hierarchy + @ExceptionHandler
public abstract class DomainException extends RuntimeException {}
public class OrderNotFoundException extends DomainException {}
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(OrderNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(OrderNotFoundException ex) {
return ResponseEntity.notFound().build();
}
}
Advanced: Stream API + Optional Chaining
public List<OrderDto> getActiveOrders(UUID customerId) {
return repository.findByCustomerId(customerId).stream()
.filter(o -> o.getStatus() == OrderStatus.ACTIVE)
.map(this::toDto)
.toList();
}
Method Javadoc Format:
/**
* Brief description.
*
* @param paramName parameter description
* @return return value description
* @throws ExceptionType when this occurs
* @see RelatedClass#method()
*/
Class Javadoc Format:
/**
* Purpose and responsibility of this class.
*
* @author Team Name
* @since 1.0.0
*/
Package Javadoc: Create package-info.java:
/**
* Order management domain package containing entities, repositories, and services.
*/
package com.example.order;
Tools & Commands:
checkstyle -c /sun_checks.xml {file} (config: .checkstyle.xml)./mvnw spotbugs:check (config: spotbugs-exclude.xml)./mvnw verify (includes tests + coverage)Verify coverage: target/site/jacoco/index.html
@JsonTypeInfo whitelisting./mvnw org.owasp:dependency-check-maven:check quarterly| Wrong | Correct |
|---|---|
| God service class (handles multiple domains) | Split by domain: OrderService, PaymentService, ShippingService |
Checked exception abuse (throws Exception) | Use runtime exceptions; catch and wrap at boundaries |
Field injection (@Autowired private X x;) | Constructor injection; enables testing and immutability |
Raw types (List list = new ArrayList();) | Use generics: List<Order> orders = new ArrayList<>(); |
| Synchronized methods everywhere | Use concurrent collections: ConcurrentHashMap, CopyOnWriteArrayList |
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
npx claudepluginhub inho-team/qe-framework --plugin qe-frameworkCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.