English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Автоматическая装配ка SpringBoot

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

В следующем примере мы увидим, как работает автоматическая конфигурация 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>

Шаг 11: в пакете   com.w3codebox.model в создании одного с именем   User класс.

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 подробнее.