Главная · Скиллы · java-springboot

java-springbootOfficialJava Spring Boot GitHub Copilot

github/awesome-copilot

Java Spring Boot GitHub.

Установка

npx -y skills add github/awesome-copilot --skill java-springboot --agent claude-code

Spring Boot — лучшие практики

Цель — помочь писать качественные приложения на Spring Boot, следуя устоявшимся лучшим практикам.

Настройка и структура проекта

  • Инструмент сборки: используйте Maven (pom.xml) или Gradle (build.gradle) для управления зависимостями.
  • Стартеры: используйте стартеры Spring Boot (например, spring-boot-starter-web, spring-boot-starter-data-jpa) для упрощения зависимостей.
  • Структура пакетов: организуйте код по фиче/домену (com.example.app.order, com.example.app.user), а не по слою (com.example.app.controller, com.example.app.service).

Внедрение зависимостей и компоненты

  • Constructor Injection: всегда используйте внедрение через конструктор для обязательных зависимостей. Это упрощает тестирование и делает зависимости явными.
  • Неизменяемость: объявляйте поля зависимостей как private final.
  • Стереотипы компонентов: используйте аннотации @Component, @Service, @Repository и @Controller/@RestController по назначению.

Конфигурация

  • Вынесенная конфигурация: используйте application.yml (или application.properties). YAML часто предпочтительнее за читаемость и иерархичность.
  • Типобезопасные свойства: используйте @ConfigurationProperties для привязки конфигурации к строго типизированным Java-объектам.
  • Профили: используйте Spring Profiles (application-dev.yml, application-prod.yml) для конфигураций под окружения.
  • Управление секретами: не хардкодьте секреты. Используйте переменные окружения или инструмент вроде HashiCorp Vault или AWS Secrets Manager.

Веб-слой (контроллеры)

  • RESTful API: проектируйте ясные и согласованные REST-эндпойнты.
  • DTO: используйте DTO для выдачи и приёма данных в слое API. Не выставляйте JPA-сущности напрямую клиенту.
  • Валидация: используйте Java Bean Validation (JSR 380) с аннотациями (@Valid, @NotNull, @Size) на DTO для валидации запросов.
  • Обработка ошибок: реализуйте глобальный обработчик через @ControllerAdvice и @ExceptionHandler для согласованных ответов об ошибках.

Сервисный слой

  • Бизнес-логика: инкапсулируйте всю бизнес-логику в классах @Service.
  • Без состояния: сервисы должны быть stateless.
  • Управление транзакциями: используйте @Transactional на методах сервиса для декларативного управления транзакциями. Применяйте на минимально необходимом уровне.

Слой данных (репозитории)

  • Spring Data JPA: используйте репозитории Spring Data JPA, наследуя JpaRepository или CrudRepository для стандартных операций.
  • Кастомные запросы: для сложных запросов используйте @Query или JPA Criteria API.
  • Проекции: используйте DTO-проекции, чтобы извлекать из БД только нужные данные.

Логирование

  • SLF4J: используйте API SLF4J.
  • Объявление логгера: private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
  • Параметризованное логирование: используйте параметризованные сообщения (logger.info("Processing user {}...", userId);) вместо конкатенации строк ради производительности.

Тестирование

  • Юнит-тесты: пишите для сервисов и компонентов на JUnit 5 и мок-фреймворке вроде Mockito.
  • Интеграционные тесты: используйте @SpringBootTest для тестов, загружающих контекст приложения Spring.
  • Срезы тестов: используйте аннотации срезов вроде @WebMvcTest (контроллеры) или @DataJpaTest (репозитории) для изолированного теста частей приложения.
  • Testcontainers: рассмотрите Testcontainers для надёжных интеграционных тестов с реальными БД, брокерами сообщений и т.д.

Безопасность

  • Spring Security: используйте для аутентификации и авторизации.
  • Кодирование паролей: всегда кодируйте пароли сильным алгоритмом хеширования вроде BCrypt.
  • Санитизация ввода: предотвращайте SQL-инъекции через Spring Data JPA или параметризованные запросы. Предотвращайте XSS правильным кодированием вывода.

Из того же репозитория