Код-ревью Middle Spring Boot и автоконфигурация обновлено

Код-ревью: конфигурация платёжного клиента

Вопрос

Найдите проблемы в конфигурации Spring Boot приложения.

@SpringBootApplication
@EnableWebMvc
public class ShopApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShopApplication.class, args);
    }
}

@Configuration
public class PaymentConfig {
    @Value("${payments.url}")
    private String url;
    @Value("${payments.timeout}")
    private int timeoutMs;
    private final String apiKey = "sk_live_4f9a1c";

    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper();
    }

    @Bean
    public PaymentClient paymentClient() {
        return new PaymentClient(url, timeoutMs, apiKey);
    }
}

# application.yml
management:
  endpoints:
    web:
      exposure:
        include: "*"

Коротко

Типичные ошибки «сделали руками то, что Boot делает лучше»: @EnableWebMvc и свой ObjectMapper выключают автоконфигурацию. Настройки клиента нужно собрать в record с @ConfigurationProperties и @Validated, ключ вынести в переменную окружения, а Actuator открыть точечно.

Что должен найти ревьюер

  1. Ошибкастрока 2
    @EnableWebMvc отключает автоконфигурацию Spring MVC: пропадут настройки Boot (конвертеры, статика, свойства spring.mvc).
  2. Стильстрока 11
    Россыпь @Value вместо @ConfigurationProperties: нет валидации и типизации, timeout лучше хранить как Duration.
  3. Безопасностьстрока 15
    Боевой ключ API захардкожен в коде и попадёт в репозиторий. Секреты берут из окружения или хранилища секретов.
  4. Ошибкастрока 18
    Свой ObjectMapper через new отключает автоконфигурацию Jackson: пропадут модули (JavaTimeModule) и свойства spring.jackson, даты начнут сериализоваться иначе.
  5. Безопасностьстрока 33
    Открыты все эндпоинты Actuator, включая env и heapdump с секретами. Нужно открыть только health и metrics, остальное закрыть или вынести на отдельный порт.

Разбор

Типичные ошибки «сделали руками то, что Boot делает лучше»: @EnableWebMvc и свой ObjectMapper выключают автоконфигурацию. Настройки клиента нужно собрать в record с @ConfigurationProperties и @Validated, ключ вынести в переменную окружения, а Actuator открыть точечно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме