models

Action Best - Spring Boot In

@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); }

public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByEmail(String email); @Query("SELECT u FROM User u WHERE u.email LIKE %:domain") List<User> findByEmailDomain(@Param("domain") String domain); } @Repository public class JdbcUserRepository { private final JdbcTemplate jdbcTemplate; public List<User> findAll() { return jdbcTemplate.query("SELECT * FROM users", (rs, rowNum) -> new User(rs.getLong("id"), rs.getString("email"))); } } MongoDB, Redis, etc. // MongoDB @Document(collection = "products") public class Product { } // Redis @RedisHash("sessions") public class UserSession { } 4. Web Development REST Controllers @RestController @RequestMapping("/api/users") public class UserController { @GetMapping public ResponseEntity<List<User>> getAll() { return ResponseEntity.ok(users); }

@PostMapping @ResponseStatus(HttpStatus.CREATED) public User create(@Valid @RequestBody User user) { return userService.save(user); } spring boot in action

@WebMvcTest(UserController.class) class UserControllerMvcTest { }

@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"); } } getAll() { return ResponseEntity.ok(users)

@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 { }

@GetMapping("/{id}") public ResponseEntity<User> getById(@PathVariable Long id) { return userService.findById(id) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); } private EmailConfig email = new EmailConfig()

myapp: custom-property: value @ConfigurationProperties(prefix = "myapp") @Component public class AppProperties { private String customProperty; private EmailConfig email = new EmailConfig(); // getters/setters @Data public static class EmailConfig { private String host; private int port; } }