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

Montagem Automática SpringBoot

A configuração automática do SpringBoot ajusta automaticamente o aplicativo SpringBoot com base nas dependências Jar adicionadas.

Por exemplo, se existir no caminho da classe o H2o Jar do banco de dados, e ainda não configuramos manualmente nenhum bean relacionado ao banco de dados, a função de configuração automática do Spring Boot configurará automaticamente no projeto.

Podemos ativar a configuração automática usando a anotação @EnableAutoConfiguration funções de configuração. No entanto, esta anotação não é usada porque ela está encapsulada @SpringBootApplication dentro da anotação. A anotação @SpringBootApplication é a combinação de três anotações: @ComponentScan, @EnableAutoConfiguration, @Configuration No entanto, usamos a anotação @SpringBootApplication em vez de @EnableAutoConfiguration.

@SpringBootApplication = @ComponentScan + @EnableAutoConfiguration + @Configuration

ao adicionar ao usar o spring em projetos-boot-starter-web Quando há dependências, a configuração automática do Spring Boot busca o Spring MVC no caminho da classe. Ele configura automaticamente dispatcherServlet padrão páginas de errotanque de rede.

Da mesma forma, quando adicionamos spring-boot-starter-data-dependências JPA, vemos que a configuração automática do Spring Boot configurará automaticamente provedor de dadosgerenciador de entidades.

Toda a lógica de configuração automática está em spring-boot-autoconfigure.jar como mostrado na figura a seguir.

que precisa de configuração automática

Os aplicativos baseados em Spring precisam de muitas configurações. Quando usamos Spring MVC, precisamos configurar servlet de despachador, analisador de visões, Web jars A seguir, é mostrada a configuração típica do servlet de despachador no aplicativo web:

<servlet>
<servlet-nome>dispatcher</servlet-nome>
<servlet-classe>
org.springframework.web.servlet.DispatcherServlet
</servlet-classe>
<iniciar-parâmetro>
<parâmetro-nome>contextConfigLocation</parâmetro-nome>
<parâmetro-valor>/WEB-INF/para fazer-servlet.xml</parâmetro-valor>
</iniciar-parâmetro>
<carregar-em-início>1</carregar-em-início>
</servlet>
<servlet-mpping>
<servlet-nome>dispatcher</servlet-nome>
<url-padrão>/</url-padrão>
</servlet-mpping>

Da mesma forma, quando usamos Hibernate/Quando usamos JPA, precisamos configurar o provedor de dados, o gerenciador de transações, a fábrica de gerenciadores de entidades etc.

Configurar o provedor de dados

<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>

configurar a fábrica de gerenciador de entidades

<bean
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
id="entityManagerFactory"
<property name="persistenceUnitName" value="hsql_pu" />
<property name="dataSource" ref="dataSource" />
</bean>

configurar o gerenciador de transações

<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"/>

desativar a classe de configuração automática

Se não quisermos ser aplicado, também podemos desativar classes de configuração automática específicas. Usamos o comentário @EnableAutoConfiguration exclude propriedade para desativar a classe de configuração automática. Por exemplo:

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 
"},"health":{"path":{"href":"http:
}

Se a classe não estiver na classe de caminho, podemos usar a propriedade do comentário @EnableAutoConfiguration excludeName 并指定类的 qualified 名称。我们可以使用属性 spring.autoconfigure.exclude 排除任何数量的自动配置类。

Spring Boot自动配置示例

在以下示例中,我们将看到Spring Boot的自动配置功能如何工作。

passo1: 打开spring Initializr https://start.spring.io/.

第2步: 名称。我们提供了 com.w3codebox .

passo3: 提供 工件 ID。我们提供了 spring-boot-autoconfiguration-example .

passo4: 添加依赖项: Spring Web,Spring Data JPA,一个 H2数据库.

passo5: 单击 Generate (生成)按钮。当我们单击"生成"按钮时,它会将项目包装在 Jar 文件中,并将其下载到本地系统。

第6步: 提取 Jar文件并将其粘贴到STS工作区中。

passo7: 将项目文件夹导入STS。

文件->导入->现有Maven项目->浏览->选择文件夹spring-boot-autoconfiguration-example->完成

导入需要一些时间。

passo8: 在目录中创建名称为 com.w3codebox.controller 的程序包。文件夹 src/main/java .

passo9: 在包中创建名称为 ControllerDemo 的Controller类。3codebox.controller 。

ControllerDemo.java

package com.w3codebox.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ControllerDemo 
"},"health":{"path":{"href":"http:
    @RequestMapping("/")
    public String home()
    "},"health":{"path":{"href":"http:
        return "home.jsp";
    }
}

passo10: na pasta src/main/java 中创建另一个名为 com.w3codebox.model 的包。

passo11: 在包   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 
"},"health":{"path":{"href":"http:
    @Id
    private int id;
    private String username;
    public int getId() 
    "},"health":{"path":{"href":"http:
        return id;
    }
    public void setId(int id) 
    "},"health":{"path":{"href":"http:
        this.id = id;
    }
    public String getUname() 
    "},"health":{"path":{"href":"http:
        return username;
    }
    public void setUname(String username) 
    "},"health":{"path":{"href":"http:
        this.username = username;
    }
    @Override
    public String toString() 
    "},"health":{"path":{"href":"http:
        return "User [id=" + id + ", uname=" + username + "]";
    }
}
 

Agora, precisamos configurar o H2banco de dados.

passo12: abrir   application.properties abra o arquivo e configure o seguinte conteúdo:  porta, ativar H2Console, fonte de dados,和   URL.

application.properties

server.port=8085
spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:w3codebox
 

passo13: na pasta   src/main/crie um arquivo SQL arquivo.

clique com o botão direito no src/main/pasta resources->Novo->Arquivo->Fornecer nome do arquivo->完成

Fornecemos o nome do arquivo   data.sql e insira os seguintes dados.

data.sql

insert into userdata values(101Tom');
insert into userdata values(102Andrew');
insert into userdata values(103Tony');
insert into userdata values(104Bob');
insert into userdata values(105Sam');
 

passo14: no   src Crie um arquivo com o nome   webapp na pasta

passo15: usando   ControllerDemo no arquivo JSP criado. No ControllerDemo.java, retornamos   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>Insira título aqui</title>
</head>
<body>
<form action="addUser">
ID <br />
<input type="text" name="t1><br />
Nome de usuário <br />
<input type="text" name="t2><br />
<input type="submit" value="Add">
</form>
</body>
</html>
 

passo16: 运行   SpringBootAutoconfigurationExampleApplication.java arquivo. Podemos ver na consola que nosso aplicativo foi executado com sucesso na porta   8085 está rodando.

passo17: 打开浏览器并调用URL   http: //localhost: 8085/h2-console/. Ele mostra a tabela definida no   application.properties configurado no arquivo  classe do driver,   JDBC URL e o nome de usuário padrão   sa .

Também podemos testar a conexão clicando no  teste de conexãobotão. Se a conexão for bem-sucedida, uma mensagem  teste bem-sucedido.

passo18: 单击  conexãobotão. Ele mostra a tabela definida no arquivo User.java   userdata estrutura.

passo19: Execute a seguinte consulta para ver o que já inserimos   data.sql os dados do arquivo

SELECT * FROM USERDATA;
 

Vamos olhar com atenção para a consola. Vemos   TransactionManagement, DispatcherServlet, EntityManagerFactory,和   DataSource será configurado automaticamente, como mostrado na figura a seguir.

Depuração de configuração automática

Podemos encontrar mais informações sobre a configuração automática das seguintes maneiras: Usando os seguintes dois métodos:

Abra a depuração de logs usando o Spring Boot Executor

Abra a depuração de logs

Podemos fazer isso através de   application.properties Adicione propriedades para depuração de logs no arquivo. Vamos implementar a depuração de logs no exemplo acima. Abra   application.properties Adicione o arquivo e as seguintes propriedades:

logging.level.org.springframework: DEBUG
 

Agora reinicie o aplicativo. Vemos que no log foi impresso um relatório de configuração automática. O relatório inclui todas as classes de configuração automática. Dividido em duas partes:  Match positivo和  Match negativocomo mostrado na figura a seguir.

Match positivo

Match negativo

Spring Boot Executor

Podemos ainda usar no projeto   Actuator Depuração de configuração automática. Também adicionaremos   Navegador HALpara simplificar as operações.

Vamos criar um exemplo de Spring Boot Actuator.

passo1: Abra o Spring Initializr http://start.spring.io 。

passo2: 提供  名称。我们提供了   com.w3codebox。

passo3: 提供  工件 ID。我们提供了  执行器自动配置示例。

passo4: 添加依赖项:   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>
 

passo5: 单击   Generate (生成)按钮。它将与项目相关的所有规范绑定到一个   jar 文件中,并将其下载到我们的本地系统中。

passo6: 提取下载的jar文件。

passo7: 使用以下步骤导入项目文件夹:

文件->导入->现有Maven项目->下一步->浏览- >选择项目文件夹->完成

导入项目后,我们可以在IDE的   Package Explorer 部分中看到以下目录结构。

passo8: 在包中创建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 
"},"health":{"path":{"href":"http:
    @GetMapping("/hello")
    public String hello() 
    "},"health":{"path":{"href":"http:
        return "Hello User, have a nice day.";
    }
}
 

passo9: 运行   ActuatorAutoConfigurationExampleApplication.java arquivo.

passo10: 打开浏览器并调用URL   http: //localhost: 8080/hello 。它返回我们在控制器中指定的字符串。

现在调用执行器URL   http: //localhost: 8080/actuator 。它将启动显示以下三个URL的执行器:   self ,   "},"templated":false},"health"}}} 和   info ,如下所示。

{"_links":{"self":{"href":"http://localhost:8080/"actuator","templated":false}//localhost:8080/actuator/health","templated":false},"health-path":{"href":"http://localhost:8080/actuator/"},"templated":false},"health"}}}/"},"health":{"path":{"href":"http:*"},"path":{"href":"http://localhost:8080/actuator/{"info":{"href":"http:
 

passo11: abrir   pom.xml arquivo e adicione   Navegador HALdependências.

<dependency>
<groupId>org.springframework.data</<groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
 

passo12: Novamente, execute   ActuatorAutoConfigurationExampleApplication.java arquivo.

Para acessar o navegador HAL, digite   http://localhost:8080 No navegador, e pressione a tecla Enter.

Agora podemos acessar o executor através do navegador HAL.

No campo de texto do gerenciador de recursos, digite  /actuator , e então clique em   Ir >botão.

Mostra com o executor. O mais importante no executor é   beans .

Quando clicamos no seta do bean, ele mostra todas as

A figura acima mostra todas as configurações automáticas.   beans detalhes.