Orders over $99
Spring Boot In Action [LATEST]
@Component @RabbitListener(queues = "order.queue") public class OrderListener { @RabbitHandler public void handleOrder(Order order) { System.out.println("Received order: " + order.getId()); } } File Upload @PostMapping("/upload") public ResponseEntity<String> handleUpload(@RequestParam("file") MultipartFile file) throws IOException { Path path = Paths.get("uploads/" + file.getOriginalFilename()); Files.write(path, file.getBytes()); return ResponseEntity.ok("File uploaded successfully"); } // Async file processing @Async public CompletableFuture<String> processFile(MultipartFile file) { // Process large files asynchronously } 14. Error Handling Global Exception Handler @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public Map<String, String> handleValidation(MethodArgumentNotValidException ex) { return ex.getBindingResult().getFieldErrors().stream() .collect(Collectors.toMap( FieldError::getField, FieldError::getDefaultMessage )); }
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } @Service public class JwtService { public String generateToken(User user) { return Jwts.builder() .setSubject(user.getEmail()) .claim("roles", user.getRoles()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + 86400000)) .signWith(getSigningKey(), SignatureAlgorithm.HS256) .compact(); } } 6. Actuator & Monitoring Enable Actuator management: endpoints: web: exposure: include: health,info,metrics,prometheus endpoint: health: show-details: always metrics: export: prometheus: enabled: true Custom Health Indicator @Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { boolean healthy = checkExternalService(); return healthy ? Health.up().build() : Health.down().withDetail("reason", "Service unavailable").build(); } } Custom Metrics @Service public class MonitoredService { private final Counter requestCounter; public MonitoredService(MeterRegistry meterRegistry) { this.requestCounter = Counter.builder("api.requests.total") .description("Total API requests") .register(meterRegistry); } spring boot in action
@JsonTest class UserJsonTest { } Profile Configuration # application-dev.yml spring: datasource: url: jdbc:h2:mem:testdb jpa: show-sql: true application-prod.yml spring: datasource: url: ${DATABASE_URL} hikari: maximum-pool-size: 20 Using Profiles @Configuration @Profile("dev") public class DevConfig { } @Service @Profile("!test") public class ProductionService { } @Component @RabbitListener(queues = "order