Spring Boot In Action Official

// Activate profile // --spring.profiles.active=dev,swagger Logback Configuration <!-- logback-spring.xml --> <configuration> <springProfile name="dev"> <root level="DEBUG"/> </springProfile> <springProfile name="prod"> <root level="INFO"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> </appender> </springProfile> </configuration> Structured Logging @Slf4j @Service public class OrderService { public void processOrder(Order order) { log.info("Processing order: {}", order.getId()); MDC.put("orderId", order.getId().toString()); try { // business logic } finally { MDC.clear(); } } } 10. Caching Enable Caching @Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { return new ConcurrentMapCacheManager("users", "products"); } }

// Enable configuration properties @EnableConfigurationProperties(AppProperties.class) Spring Data JPA @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique = true) private String email; @CreationTimestamp private LocalDateTime createdAt; } spring boot in action

@GetMapping(value = "/stream/users", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<User> streamUsers() { return Flux.interval(Duration.ofSeconds(2)) .map(tick -> new User()); } } Basic Security Configuration @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeHttpRequests(auth -> auth .requestMatchers("/public/**", "/api/auth/**").permitAll() .requestMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() ) .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .build(); } // Activate profile // --spring

@CacheEvict(value = "users", allEntries = true) public void clearCache() { } } Scheduled Tasks @Configuration @EnableScheduling public class SchedulingConfig { } @Component public class ScheduledTasks { // Activate profile // --spring.profiles.active=dev

@Scheduled(cron = "0 0 * * * *") public void hourlyTask() { // Runs every hour }

@Service public class UserService { @Cacheable(value = "users", key = "#id") public User findById(Long id) { return userRepository.findById(id).orElseThrow(); }

@Service public class EmailService { @Async public CompletableFuture<Void> sendEmail(String to, String content) { // Simulate email sending return CompletableFuture.completedFuture(null); } } RabbitMQ @Configuration public class RabbitConfig { @Bean public Queue queue() { return new Queue("order.queue", false); } @Bean public TopicExchange exchange() { return new TopicExchange("order.exchange"); } }