Оригинальный текст взят из блога инженера baeldung,портал
Недавно пришло время весеннего набора.Все студенты начали готовиться к вопросам, связанным с собеседованием.Здесь г-н Ойген опубликовал вопросы и ответы, связанные с интервью, связанные с SpringBoot в baeldung, надеясь помочь всем.
Обзор
С момента своего появления SpringBoot играет важную роль в экосистеме Spring. Функция автоматического развертывания этого проекта упрощает наше программирование.
В этой статье мы представим некоторые распространенные вопросы, связанные со Spring Boot, которые могут возникнуть во время собеседований с инженерами.
вопрос
Вопрос 1. В чем разница между Spring и SpringBoot?
Spring Framework предоставляет множество функций, упрощающих разработку веб-приложений, включая внедрение зависимостей, привязку данных, программирование аспектов, доступ к данным и многое другое.
Экосистема Spring со временем стала более сложной, и файлы конфигурации, необходимые приложению, могут быть пугающими. Вот где Spirng Boot пригодится — он упрощает настройку Spring.
На самом деле веснаunopinionated(элементов конфигурации много, а тенденция слабая), Spring Boot больше в практике платформ и библиотек.opinionated, облегчая нам начало работы.
Вот два преимущества SpringBoot:
- Автоматическая настройка приложений на основе артефактов в classpath
- Предоставляет нефункциональные функции, такие как проверка безопасности и работоспособности приложений в рабочей среде.
Вопрос 2. Как использовать Maven для создания программы SpringBoot?
Как и при импорте других библиотек, мы можем добавить зависимости SpringBoot в проект Maven. Однако лучше всего начать сspring-boot-starter-parentПроект наследует и объявляет зависимости от стартеров Spring Boot. Это позволяет нашему проекту повторно использовать конфигурацию SpringBoot по умолчанию.
наследоватьspring-boot-starter-parentЗависимости проекта просты — нам просто нужноpom.xmlопределитьparentузел:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
Мы можем найти его в центре Mavenspring-boot-starter-parentПоследняя версия.
Использование зависимостей стартового родительского проекта удобно, но не всегда возможно. Например, если в нашей компании все проекты требуют наследования стандартного POM, мы не можем полагаться на стартер SpringBoot.
В этом случае мы можем справиться с этим с помощью управления зависимостями в элементе POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Наконец, мы можем добавить некоторые зависимости в стартер SpringBoot, и все готово.
Вопрос 3. Какова роль стартера SpringBoot?
Управление зависимостями является жизненно важной частью любого проекта. Когда проект становится довольно сложным, управление зависимостями может превратиться в кошмар, потому что задействовано так много артефактов.
Вот где стартер SpringBoot пригодится. Каждый статер действует как универсальный магазин необходимых нам функций Spring. Другие необходимые зависимости внедряются и управляются согласованным образом.
Все стартеры относятся кorg.springframework.bootгруппа, и все они начинают сspring-boot-starter-Начните с имени.Этот метод именования упрощает поиск начальных зависимостей, особенно когда мы используем IDE, которые поддерживают поиск зависимостей по имени..
На момент написания этой статьи существует более 50 стартеров, наиболее часто используемыми являются:
- spring-boot-starter: запуск ядра, включая автоматическую поддержку конфигурации, ведение журнала и YAML.
- spring-boot-starter-aop: Стартер программирования аспектов, связанный с Spring AOP и AspectJ.
- spring-boot-starter-data-jpa: Стартер с использованием Hibernate Spring Data JPA
- spring-boot-starter-jdbc: Стартер с использованием пула соединений HikariCP JDBC
- spring-boot-starter-security: использовать стартер Spring Security
- spring-boot-starter-test: Стартер, связанный с тестом SpringBoot
- spring-boot-starter-web: Стартер для создания спокойных веб-приложений SpringMVC.
Вопрос 4. Как отключить некоторые функции автоматической настройки?
Если мы хотим отключить определенные функции автоматической настройки, мы можем использовать@EnableAutoConfigurationаннотированныйexcludeатрибут для указания. Например, следующий фрагмент кода делаетDataSourceAutoConfigurationнедействителен:
// other annotations
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }
если мы используем@SpringBootApplicationАннотация - что будет@EnableAutoConfigurationВ качестве пункта мета-аннотации для включения автоматической настройки мы можем отключить автоматическую настройку с помощью одноименного свойства:
// other annotations
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }
мы также можем использоватьspring.autoconfigure.excludeСвойство среды для отключения автоматической настройки.application.propertiesЭта конфигурация может делать то же самое, что и раньше:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Вопрос 5. Как зарегистрировать пользовательскую конфигурацию автоматизации?
Чтобы зарегистрировать класс конфигурации автоматизации, мы должныMETA-INF/spring.factoriesв файлеEnableAutoConfigurationЕго полное имя указано под ключом:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration
Если мы используем Maven для сборки проекта, этот файл необходимо поместить в пакет, который был написан на этапе пакета.resources/META-INFв каталоге.
Вопрос 6. Как выполнить автоматическую настройку, когда компонент уже существует?
Чтобы уведомить класс автоконфигурации о выполнении после того, как bean-компонент уже существует, мы можем использовать@ConditionalOnMissingBeanаннотация. Наиболее заметными свойствами этой аннотации являются:
- значение: тип проверяемых компонентов
- name: имя проверяемого компонента
когда будет@BeanПри оформлении метода целевой тип по умолчанию соответствует типу возвращаемого значения метода:
@Configuration
public class CustomConfiguration {
@Bean
@ConditionalOnMissingBean
public CustomService service() { ... }
}
Вопрос 7. Как развернуть веб-приложение SpringBoot в виде файла JAR или WAR?
Обычно мы упаковываем наше веб-приложение в виде файла WAR и развертываем его на другом сервере. Это позволяет нам работать над несколькими проектами на одном сервере. Это лучший способ сэкономить ресурсы, когда ЦП и память ограничены.
Однако дело приняло оборот. Компьютерное оборудование сегодня относительно дешевое, и сейчас большое внимание уделяется конфигурациям серверов. Небольшая ошибка в конфигурации сервера при развертывании может привести к непредвиденным авариям.
Spring решает эту проблему, предоставляя плагины, т.е.spring-boot-maven-pluginдля упаковки веб-приложения в дополнительный файл JAR. Чтобы импортировать этот плагин, простоpom.xmlдобавитьpluginАтрибуты:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
С помощью этого плагина мы выполнимpackageПосле шагов вы получите пакет JAR. Этот пакет JAR содержит все необходимые зависимости и встроенный сервер. Поэтому нам больше не нужно беспокоиться о настройке дополнительного сервера.
Мы можем запустить приложение, запустив обычный пакет JAR.
Обратите внимание, что для упаковки в файл JARpom.xmlсерединаpackgaingСвойства должны быть определены какjar:
<packaging>jar</packaging>
Если мы не определяем этот элемент, его значение по умолчанию также равноjar.
Если мы хотим создать файл WAR, мыpackagingэлемент изменен наwar:
<packaging>war</packaging>
И удалите зависимость контейнера из файла пакета:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
Казнить МавенpackageПосле шагов мы получаем развертываемый WAR-файл.
Вопрос 8. Как использовать SpringBoot для выполнения программ командной строки?
Как и другие программы Java, программа командной строки SpringBoot должна иметьmainметод. Этот метод действует как точка входа, вызываяSpringApplication#runметод выполнения драйвера:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class);
// other statements
}
}
SpringApplicationКласс запускает контейнер Spirng и автоматически настраивает bean-компоненты.
Обратите внимание, что мы должны передать класс конфигурации вrunметод в качестве основного ресурса конфигурации. По соглашению этот параметр обычно является самим классом входа.
вызовrunПосле метода мы можем выполнять другие операторы, как обычную программу.
Вопрос 9. Каковы возможные источники внешней конфигурации?
SpringBoot обеспечивает поддержку внешней конфигурации, позволяя нам запускать одно и то же приложение в разных средах. Мы можем объявить свойства конфигурации, используя файлы свойств, файлы YAML, переменные среды, системные параметры и параметры параметров командной строки.
Тогда мы можем пройти@Valueэтот пропуск@ConfigurationPropertiesАннотация или реализация связанного объектаEnviromentдля доступа к этим свойствам.
Ниже приведены наиболее распространенные источники внешней конфигурации:
- Атрибуты командной строки. Аргументы параметров командной строки — это аргументы программы, начинающиеся с двойного дефиса (например, =), например.--server.port=8080. SpringBoot преобразует все параметры в свойства и добавляет их в свойства среды.
- Свойства приложения: Свойства приложения — это свойства изapplication.propertiesСвойство, полученное в файле или его копии YAML. По умолчанию SpringBoot запускается из текущего каталога, корневого каталога пути к классам или из своего собственного каталога.configНайдите подкаталоги для этого файла.
- конкретныйprofileКонфигурация: специальная конфигурация профиля изapplication-{profile}.propertiesфайл или свою копию YAML.{profile}заполнители относятся к используемомуprofile. Эти файлы находятся в том же месте, что и неспецифические файлы конфигурации, и имеют над ними приоритет.
Вопрос 10. Что означает, что SpringBoot поддерживает свободное связывание?
Свободная привязка в Spring Boot подходит для безопасной привязки свойств конфигурации. При свободной привязке ключи свойств среды не обязательно должны точно совпадать с именами свойств. Это позволяет использовать верблюжий регистр, тире, змею или подчеркивание.
Например, в@ConfigurationPropertiesКласс компонента объявляется с помощьюmyPropсвойство, которое может быть привязано к любому из следующих параметров,myProp,my-prop,my_propилиMY_PROP.
Вопрос 11. Каково назначение SpringBoot DevTools?
Инструменты разработчика SpringBoot, или DevTools, представляют собой набор инструментов, упрощающих процесс разработки. Для того, чтобы представить эти инструменты, нам нужно толькоPOM.xmlДобавьте следующие зависимости в:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
spring-boot-devtoolsМодули по умолчанию отключены в продакшене, а также по умолчанию в этом модуле исключены перепаковки архивов. Таким образом, это не приносит никаких накладных расходов в нашей производственной среде.
Как правило, свойства приложения DevTools подходят для среды разработки. Эти свойства отключают кэширование шаблонов, включают ведение журнала отладки для веб-групп и многое другое. Наконец, мы можем иметь разумную конфигурацию среды разработки без установки каких-либо свойств.
Приложения, использующие DevTools, перезапускаются при каждом изменении файла в пути к классам. Это полезно при разработке, поскольку обеспечивает быструю обратную связь по изменениям.
По умолчанию статические ресурсы, такие как шаблоны представлений, не перезапускаются после модификации. Вместо этого изменения в ресурсах вызывают обновление браузера. Обратите внимание, что это произойдет только в том случае, если в браузере установлено расширение LiveReload для взаимодействия со встроенным сервером LiveReload, включенным в DevTools.
Вопрос 12. Как написать интеграционный тест?
Когда мы используем приложение Spring для запуска интеграционного теста, нам нуженApplicationContext.
Чтобы упростить нашу разработку, SpringBoot предоставляет аннотацию для тестирования —@SpringBootTest. Эта аннотация создает класс конфигурации из класса конфигурации, указанного его атрибутом классов.ApplicationContext.
Если атрибут классов не настроен, SpringBoot будет искать основной класс конфигурации. Поиск начнется с пакета, содержащего тестовый класс, пока не будет найден тот, который использует@SpringBootApplicationили@SpringBootConfigurationкласс пока.
Обратите внимание, что при использовании JUnit4 мы должны использовать@RunWith(SpringRunner.class)украсить этот тестовый класс.
Вопрос 13. Что делает привод SpringBoot?
По сути, Actuator оживляет приложения SpringBoot, предоставляя готовые к работе функции. Эти возможности позволяют нам отслеживать приложения в рабочей среде и управлять ими.
Интегрировать SpringBoot Actuator в проект очень просто. Все, что нам нужно сделать, этоspring-boot-starter-actuatorСтартер вносится в файл POM.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
SpringBoot Actuaor может использовать конечные точки HTTP или JMX для просмотра информации об операции. Большинство приложений используют HTTP в качестве идентификатора конечной точки и используют/actuatorпрефикс в качестве пути URL.
Вот некоторые часто используемые встроенные конечные точки Actuator:
- auditevents: просмотр информации о событиях аудита.
- env: просмотр переменных окружения
- health: просмотр информации о работоспособности приложения.
- httptrace: Отображение информации о пути HTTP
- info: выставкаarbitraryИнформация о приложении
- metrics: Отображение информации о показателях
- loggers: отображение и изменение конфигурации регистратора в приложении.
- mappings: показать все@RequestMappingинформация о пути
- scheduledtasks: Отображение информации о запланированной задаче в приложении.
- threaddump:воплощать в жизньThread Dump
3. Резюме
В этой статье мы обсудили некоторые ключевые вопросы о SpringBoot, с которыми вы можете столкнуться во время технических собеседований. Мы надеемся, что эта статья помогла вам найти работу своей мечты.
4. Резюме переводчика
Исходный текст включает в себя некоторые функции и характеристики, представленные в SpringBoot. Переводчик также рассмотрел некоторые моменты, на которые следует обратить внимание при переводе, надеясь помочь читателям лучше понять SpringBoot и иметь возможность спокойно отвечать на вопросы интервьюера.
Я также хотел бы отметить здесь, если вы хотите работать с нами, вы можете отправить свое резюме в наш почтовый ящик, мы ждем вас, чтобы присоединиться к нам!
Маленькие динамики
Команда разработчиков Java компании Guangzhou Reed Technology
Reed Technology-Guangzhou Professional Internet Software Service Company
Ухватитесь за каждую деталь и создайте каждую красоту
Подпишитесь на наш официальный аккаунт, чтобы узнать больше
Хотите сразиться с нами? лагу поиск"Рид Технология» или отправить свое резюме наserver@talkmoney.cnПрисоединяйтесь к нам
Следите за нами, ваши комментарии и лайки - наша самая большая поддержка