Доступ к данным

Тема дорожной карты · Spring Boot

Доступ к данным в Spring — это совокупность модулей Spring Framework и авто-конфигураций Spring Boot, упрощающих чтение и запись данных в реляционные и нереляционные базы данных. На реляционном уровне доступ к данным в Spring включает JdbcTemplate для низкоуровневого выполнения SQL, Spring Data JPA с Hibernate в качестве JPA-провайдера по умолчанию и Spring Data JDBC как более лёгкую альтернативу с явным SQL — всё это авто-конфигурируется при наличии соответствующего стартера (например, spring-boot-starter-data-jpa) в classpath. Для нереляционных хранилищ доступ к данным в Spring расширяется на Spring Data MongoDB, Spring Data Redis и Spring Data Elasticsearch, каждый из которых предоставляет единую абстракцию репозитория через интерфейсы CrudRepository и PagingAndSortingRepository. Управление транзакциями является первоклассной задачей в слое доступа к данным: аннотация @Transactional, поддерживаемая Spring PlatformTransactionManager, обеспечивает атомарное выполнение или откат операций с базой данных. Доступ к данным в Spring интегрируется с Testcontainers и @DataJpaTest для изолированного, реалистичного тестирования базы данных без полного контекста Spring Boot-приложения.

Как это работает

Доступ к данным покрывает cache + NoSQL + low-level access. @Cacheable + Spring Cache abstraction (Caffeine, Redis, EhCache) меморизируют результаты методов. Spring Data Redis — кеш, sessions, pub/sub, distributed locks. Spring Data MongoDB для document storage. JdbcTemplate для raw SQL, когда JPA мешает (read-heavy queries, сложные joins). Выбирайте правильный инструмент под паттерн — JPA не молоток.

Когда применять

Кешируйте reads, не writes. Local cache — Caffeine; distributed — Redis. Не кешируйте вечно — TTL + инвалидация на writes. Mongo когда document model подходит (event stores, content) — не уходите от реляционного по дефолту. JdbcTemplate быстрый + battle-tested, когда нужен контроль.

Типичные ошибки

Ловушки Доступ к данным: @Cacheable на методах с mutable state (stale cache); нет eviction (кеш растёт без границ); Mongo "потому что NoSQL" без подходящей document model; raw SQL со string concat (SQL injection — parameter binding).

Связанные понятия

Полезные ресурсы