Как Spring Boot настраивает приложение сам
Вопрос
Вы добавили зависимость spring-boot-starter-data-jpa и указали URL базы, и всё заработало. Объясните, что произошло.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Стартер принёс Hibernate, Spring Data, HikariCP с согласованными версиями
@EnableAutoConfiguration загрузил классы из AutoConfiguration.imports
Условия @ConditionalOnClass сработали на классы в classpath
DataSource, EntityManagerFactory, TransactionManager созданы с @ConditionalOnMissingBean
Свойства spring.datasource.* связаны через @ConfigurationProperties
Свой бин отключает дефолтный, отчёт условий через --debug
Что могут спросить следом
- Как отключить одну автоконфигурацию?
- Как написать свой стартер?
Разбор
Стартер data-jpa принёс в classpath Hibernate, Spring Data JPA, HikariCP и JDBC с совместимыми версиями. При старте @EnableAutoConfiguration прочитал список классов автоконфигурации из файлов AutoConfiguration.imports во всех jar-ах. Классы проверили условия: есть DataSource и Hikari в classpath, значит DataSourceAutoConfiguration создаёт пул, свойства spring.datasource.* связываются через ConfigurationProperties. Дальше HibernateJpaAutoConfiguration создаёт EntityManagerFactory и JpaTransactionManager, а автоконфигурация репозиториев находит интерфейсы-репозитории. Все эти бины под @ConditionalOnMissingBean, поэтому если я объявлю свой DataSource, Boot свой не создаст. Что сработало и почему, видно в отчёте условий при запуске с --debug. Отключить конкретную автоконфигурацию можно через exclude.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.