English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SpringBoot автоматически конфигурирует SpringBoot приложение в зависимости от добавленных нами jar зависимостей.
например, если в классовом пути есть Jar файла базы данных H2, и мы не вручную конфигурировали никаких бинов, связанных с базой данных, функция автоматической конфигурации Spring Boot автоматически конфигурирует это в проекте.
мы можем включить автоматическую конфигурацию, используя аннотацию @EnableAutoConfiguration функциональная конфигурация. Но этой аннотации не используется, потому что она 包装ается в @SpringBootApplication внутри аннотации. Аннотация @SpringBootApplication является kombinatsiyu из трех аннотаций: @ComponentScan, @EnableAutoConfiguration,и @Configuration но мы используем аннотацию @SpringBootApplication вместо @EnableAutoConfiguration.
@SpringBootApplication = @ComponentScan + @EnableAutoConfiguration + @Configuration
при добавлении в проекте использование spring-boot-starter-web при добавлении зависимости, Spring Boot автоматически ищет Spring MVC в классовом пути. Оно автоматически конфигурирует dispatcherServlet по умолчанию страница ошибкии сеть.
Аналогично, когда мы добавляем зависимость spring-boot-starter-data-jpa,我们看到Spring Boot автоматически конфигурирует источник данныхи менеджер сущностей.
Все логики автоматической конфигурации находятся в spring-boot-autoconfigure.jar как показано на рисунке ниже.
Для приложений на основе Spring необходимо много конфигураций. При использовании Spring MVC нам нужно конфигурировать dispatcher servlet, визуальный анализатор, веб-ярлыки Следующий код показывает типичную конфигурацию servlet-диспетчера в веб-приложении:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/todo-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
Аналогично, когда мы используем Hibernate/JPA, нам нужно конфигурировать источник данных, менеджер транзакций, фабрику сущностей и т.д.
Конфигурация источника данных
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> destroy-method="close"> <property name="driverClass" value="${db.driver}" /> <property name="jdbcUrl" value="${db.url}" /> <property name="user" value="${db.username}" /> <property name="password" value="${db.password}" /> </bean> <jdbc:initialize-database data-source="dataSource"> <jdbc:script location="classpath:config/schema.sql"/> <jdbc:script location="classpath:config/data.sql"/> </jdbc:initialize-database>
Конфигурация фабрики управления сущностями
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory" <property name="persistenceUnitName" value="hsql_pu"/> <property name="dataSource" ref="dataSource"/> </bean>
Конфигурация управления транзакциями
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/>
Если мы не хотим, чтобы приложение использовало автоматическую конфигурацию, мы можем отключить определенные автоматические конфигурационные классы. Для этого мы используем аннотацию @EnableAutoConfiguration exclude Свойства для禁止自动配置类. Например:
import org.springframework.boot.autoconfigure.*; import org.springframework.boot.autoconfigure.jdbc.*; import org.springframework.context.annotation.*; @Configuration(proxyBeanMethods = false) @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration { }
Если класс не в классовом пути, мы можем использовать атрибут свойства EnableAutoConfiguration аннотации excludeName и указать имя класса квалифицированный Имя. Мы можем использовать атрибут spring.autoconfigure.exclude Исключите любое количество автоматических конфигурационных классов.
В следующем примере мы увидим, как работает автоматическая конфигурация Spring Boot.
Шаг 1: Откройте spring Initializr https://start.spring.io/
Шаг 2: группаНазвание. Мы предоставляем com.w3codebox .
Шаг 3: предоставляет артифакт ID. Мы предоставляем spring-boot-autoconfiguration-example .
Шаг 4: Добавить зависимость: Spring Web, Spring Data JPA,один H2 база данных.
Шаг 5: нажмите Generate (создание) кнопка. При нажатии на кнопку "Создать" она упаковывает проект в Jar файл и загрузите его на локальную систему.
Шаг 6: Извлеките Jar файл и скопируйте его в рабочую зону STS.
Шаг 7: ДобавьтеИмпортируйте проектную папку в STS.
Файл->Импорт->Существующий Maven проект->Проброс->Выберите папку spring-boot-autoconfiguration-example->Готово
импорт требует времени.
步骤8: В каталоге создайте именем com.w3codebox.controller пакет. Папка src/main/java .
步骤9: В пакете создайте именем ControllerDemo Controller класс. <strong>com.w3codebox.controller</strong> .
ControllerDemo.java
package com.w3codebox.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ControllerDemo { @RequestMapping("/") public String home() { return "home.jsp"; } }
步骤10: в папке src/main/java в создании другого с именем com.w3codebox.model пакета. p>
User.java
package com.w3codebox.model; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="userdata") public class User { @Id private int id; private String username; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUname() { return username; } public void setUname(String username) { this.username = username; } @Override public String toString() { return "User [id=" + id + ", uname=" + username + "]"; } }
Теперь нам нужно настроить базу данных H2.
Шаг 12: Откройте application.properties создайте файл и настройте следующий контент: порт, включить консоль H2, источник данных,и URL.
application.properties
server.port=8085 spring.h2.console.enabled=true spring.datasource.platform=h2 spring.datasource.url=jdbc:h2:mem:w3codebox
Шаг 13: в папке создать один в src/main/resources SQL файл.
Щелкните правой кнопкой мыши папку src/main/resources ->新建 -> Файл -> Укажите имя файла -> Готово
Мы предоставляем имя файла data.sql и добавить следующую информацию.
data.sql
insert into userdata values(101, 'Tom'); insert into userdata values(102, 'Andrew'); insert into userdata values(103,'Tony'); insert into userdata values(104,'Bob'); insert into userdata values(105,'Sam');
Шаг 14: в src в папке webapp в папке
Шаг 15: в папке ControllerDemo Создайте файл JSP, используя имя, возвращенное в home.jsp .
home.jsp
<%@page language="java" contentType="text/html; charset=ISO-8859-1" %> pageEncoding="ISO-8859-1"> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Вставьте здесь заголовок</title> </head> <body> <form action="addUser"> ID:<br /> <input type="text" name="t1"><br /> Имя пользователя:<br /> <input type="text" name="t2"><br /> <input type="submit" value="Add"> </form> </body> </html>
Шаг 16: 运行 SpringBootAutoconfigurationExampleApplication.java в файле. Мы можем увидеть в консоли, что наше приложение успешно запущено на порту 8085 на порту
Шаг 17: 打开浏览器并调用URL http: //localhost: 8085/h2-console/. Она показывает, что мы запустили application.properties настроенный в файле класс драйвера, JDBC URL , а также по умолчанию имя пользователя sa .
Мы также можем тестировать соединение, нажав тестировать соединениекнопка. Если соединение успешное, будет отображаться сообщение тест успешен.
Шаг 18: нажмите соединениекнопка. Она показывает таблицу, которую мы определили в файле User.java userdata структуру.
Шаг 19: Выполните следующее запрос, чтобы проверить, что мы вставили data.sql данные из файла
SELECT * FROM USERDATA;
Давайте внимательно посмотрим на консоль. Мы видим Управление транзакциями, DispatcherServlet, EntityManagerFactory,и Источник данных будет автоматически конфигурироваться, как показано на рисунке.
Мы можем найти больше информации о автоматической конфигурации следующим образом: Используйте следующие два способа:
Откройте отладку журналов Используя Spring Boot executorОткройте отладку журналов
Мы можем сделать это, открыв application.properties добавить свойства для отладки журналов. Давайте реализуем отладку журналов в приведенном выше примере. Откройте application.properties Файл и добавьте следующие свойства:
logging.level.org.springframework: DEBUG
Теперь перезапустите приложение. Мы видим, что в журнале было напечатано сообщение о отчете о автоматической конфигурации. Отчет включает все классы автоматической конфигурации. Он разделен на две части: положительное соответствиеи Отрицательное соответствие, как показано на рисунке.
положительное соответствие
отрицательное соответствие
Spring Boot executor
Мы также можем использовать в проекте Actuator Дебаговая автоматическая конфигурация. Мы также добавим HAL браузер, чтобы упростить процесс.
Давайте создадим пример Spring Boot Actuator.
Шаг 1: Откройте Spring Initializr http://start.spring.io .
Шаг 2: предоставляет группаНазвание. Мы предоставляем com.w3codebox。
Шаг 3: предоставляет артифакт ID. Мы предоставляем Пример автоматической конфигурации executor.
Шаг 4: Добавить зависимость: Spring Web и Spring Boot Actuator.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Шаг 5: нажмите Generate (Создать) кнопка. Она связана со всеми спецификациями, связанными с проектом jar в файле и загрузите его в нашу локальную систему.
Шаг 6: Разархивироватьскаченные jar файлы.
Шаг 7: Используйте следующие шаги для импортаПапка проекта:
Файл->Импорт->Существующий проект Maven->Далее->Перейти->Выберите папку проекта->Готово
导入项目后,我们可以在IDE的 Package Explorer 部分中看到以下目录结构。
步骤8: 在包中创建Controller类 com.w3codebox。我们创建了一个名为 DemoRestController的控制器类。
在Controller中,我们定义了一个名为 hello( ),它返回一个字符串。
DemoRestController.java
package com.w3codebox; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoRestController { @GetMapping("/hello") public String hello() { return "Hello User, have a nice day."; } }
步骤9: 运行 ActuatorAutoConfigurationExampleApplication.java файл.
步骤10: 打开浏览器并调用URL http: //localhost: 8080/hello 。它返回我们在控制器中指定的字符串。
现在调用执行器URL http: //localhost: 8080/actuator 它将启动显示以下三个URL的执行器: self , health и info 如下图所示。
{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},"health":{"href":"http://localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/health/{*path}","templated":true},"info":{"href":"http://localhost:8080/actuator/info","templated":false}}}
Шаг 11: Откройте pom.xml файл и добавьте HAL браузерЗависимости.
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-rest-hal-browser</artifactId> </dependency>
Шаг 12: Еще раз, запустите ActuatorAutoConfigurationExampleApplication.java файл.
Чтобы открыть HAL браузер, введите http://localhost:8080 В браузере, затем нажмите Enter.
Теперь мы можем访问 executor через HAL браузер.
В текстовом поле ресурсного менеджера введите /actuator , затем нажмите Go >кнопка.
Это показывает с исполнителем. Самым важным в executor beans .
Когда мы нажимаем на стрелку bean, она показывает все
На этом рисунке показаны все автоматически конфигурируемые beans подробнее.