// Enable in Spring Boot@ConfigurationpublicclassThreadConfig{@BeanpublicTomcatProtocolHandlerCustomizer<?>protocolHandlerVirtualThreadExecutorCustomizer(){returnprotocolHandler->{protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());};}}// Manual usagetry(varexecutor=Executors.newVirtualThreadPerTaskExecutor()){List<Future<String>>futures=urls.stream().map(url->executor.submit(()->fetchData(url))).toList();for(Future<String>future:futures){Stringresult=future.get();}}
// Structured concurrencytry(varscope=newStructuredTaskScope.ShutdownOnFailure()){Future<String>user=scope.fork(()->fetchUser(userId));Future<List<Order>>orders=scope.fork(()->fetchOrders(userId));scope.join();// Wait for all tasksscope.throwIfFailed();// Propagate errorsreturnnewUserProfile(user.resultNow(),orders.resultNow());}
@RepositorypublicinterfaceUserRepositoryextendsJpaRepository<User,Long>{booleanexistsByEmail(Stringemail);Optional<User>findByEmail(Stringemail);@Query(""" SELECT u FROM User u WHERE u.status = :status AND u.createdAt > :since ORDER BY u.createdAt DESC """)Page<User>findActiveUsers(@Param("status")UserStatusstatus,@Param("since")Instantsince,Pageablepageable);@Modifying@Query("UPDATE User u SET u.lastLogin = :now WHERE u.id = :id")voidupdateLastLogin(@Param("id")Longid,@Param("now")Instantnow);}
publicclassResourceNotFoundExceptionextendsRuntimeException{publicResourceNotFoundException(Stringmessage){super(message);}}// Global exception handler@RestControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(ResourceNotFoundException.class)publicResponseEntity<ErrorResponse>handleNotFound(ResourceNotFoundExceptionex){ErrorResponseerror=newErrorResponse(HttpStatus.NOT_FOUND.value(),ex.getMessage(),Instant.now());returnResponseEntity.status(HttpStatus.NOT_FOUND).body(error);}@ExceptionHandler(MethodArgumentNotValidException.class)publicResponseEntity<ErrorResponse>handleValidation(MethodArgumentNotValidExceptionex){Map<String,String>errors=ex.getBindingResult().getFieldErrors().stream().collect(Collectors.toMap(FieldError::getField,FieldError::getDefaultMessage));ErrorResponseerror=newErrorResponse(HttpStatus.BAD_REQUEST.value(),"Validation failed",errors,Instant.now());returnResponseEntity.badRequest().body(error);}}
publicrecordCreateUserRequest(@NotBlank(message="Email is required")@Email(message="Invalid email format")Stringemail,@NotBlank(message="Password is required")@Size(min=8,message="Password must be at least 8 characters")Stringpassword){}
# Maven commandsmvncleaninstall# Build projectmvntest# Run testsmvnverify# Run tests + integration testsmvnjacoco:report# Generate coverage report# Run with preview featuresmvncleanpackage
java--enable-preview-jartarget/app.jar
# Spring Bootmvnspring-boot:run# Run applicationmvnspring-boot:build-image# Build Docker image