📜  Spring Boot自动配置

📅  最后修改于: 2021-01-11 05:13:15             🧑  作者: Mango

Spring Boot自动配置

Spring Boot自动配置基于我们添加的jar依赖项自动配置Spring应用程序。

例如,如果H2数据库Jar存在于类路径中,并且我们尚未手动配置与数据库相关的任何bean,则Spring Boot的自动配置功能会在项目中自动对其进行配置。

我们可以使用注释@EnableAutoConfiguration启用自动配置功能。但是此注释不使用,因为它包装在@SpringBootApplication注释内。注释@SpringBootApplication是三个注释的组合: @ ComponentScan,@ EnableAutoConfiguration@Configuration 。但是,我们使用@SpringBootApplication批注而不是使用@EnableAutoConfiguration。

@ SpringBootApplication = @ ComponentScan + @ EnableAutoConfiguration + @ Configuration

当我们在项目中添加spring-boot-starter-web依赖项时,Spring Boot自动配置会在类路径中查找Spring MVC。它会自动配置dispatcherServlet ,默认错误页面web jars

同样,当我们添加spring-boot-starter-data-jpa依赖项时,我们看到Spring Boot自动配置会自动配置数据源Entity Manager

所有自动配置逻辑都在spring-boot-autoconfigure.jar中实现,如下图所示。

需要自动配置

基于Spring的应用程序需要大量配置。使用Spring MVC时,我们需要配置调度程序servlet,视图解析器,Web jar等。以下代码显示了Web应用程序中调度程序servlet的典型配置:


dispatcher

org.springframework.web.servlet.DispatcherServlet


contextConfigLocation
/WEB-INF/todo-servlet.xml

1


dispatcher
/

同样,当我们使用Hibernate / JPA时,我们需要配置数据源,一个事务管理器,一个实体管理器工厂以及许多其他东西。

配置数据源











配置实体管理器工厂





配置事务管理器






禁用自动配置类

如果我们不想被应用,我们也可以禁用特定的自动配置类。我们使用注释@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.javatpoint

第3步:提供工件ID。我们提供了spring-boot-autoconfiguration-example

步骤4:添加依赖项: Spring Web,Spring Data JPA, H2数据库

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

步骤6:解压缩Jar文件并将其粘贴到STS工作区中。

步骤7:将项目文件夹导入STS。

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

导入需要一些时间。

步骤8:在文件夹src / main / java中创建一个名称为com.javatpoint.controller的包。

步骤9:在包com.javatpoint.controller中创建一个名称为ControllerDemo的Controller类。

ControllerDemo.java

package com.javatpoint.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.javatpoint.model的包。

步骤11:在包com.javatpoint.model中创建一个名为User的类。

User.java

package com.javatpoint.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.plateform=h2
spring.datasource.url=jdbc:h2:mem:javatpoint

步骤13:在文件夹src / main / resources中创建一个SQL文件。

右键单击文件夹src / main / resources->新建-> File->提供文件名-> Finish

我们提供了文件名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文件。在ControllerDemo.java中,我们返回了home.jsp

home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>




Insert title here


ID :

User name :

步骤16:运行SpringBootAutoconfigurationExampleApplication.java文件。我们可以在控制台中看到我们的应用程序已在端口8085上成功运行。

步骤17:打开浏览器并调用URL http:// localhost:8085 / h2-console / 。它显示了驱动程序类,我们在application.properties文件中配置的JDBC URL和默认的用户名sa

我们也可以通过单击“测试连接”按钮来测试连接。如果连接成功,则显示消息“测试成功”。

步骤18:点击Connect(连接)按钮。它显示了我们在User.java文件中定义的表userdata的结构。

步骤19:执行以下查询以查看我们已插入到data.sql文件中的数据。

SELECT * FROM USERDATA;

让我们仔细看一下控制台。我们看到TransactionManagement,DispatcherServlet,EntityManagerFactoryDataSource是自动配置的,如下图所示。

调试自动配置

我们可以通过以下两种方式找到有关自动配置的更多信息:

  • 打开调试日志记录
  • 使用弹簧启动执行器

打开调试日志记录

我们可以通过在application.properties文件中添加属性来调试日志记录。让我们在上面的示例中实现调试日志记录。打开application.properties文件,并添加以下属性:

logging.level.org.springframework: DEBUG

现在重新启动应用程序。我们看到在日志中打印了一个自动配置报告。该报告包括所有自动配置的类。它分为两部分:正匹配负匹配,如下图所示。

正面比赛

负匹配

弹簧启动执行器

我们还可以通过在项目中使用Actuator调试自动配置。我们还将添加HAL浏览器以使事情变得容易。它显示了自动配置的所有Bean的详细信息,而未配置的详细信息。

让我们创建一个Spring Boot Actuator的示例。

步骤1:打开Spring Initializr http://start.spring.io

步骤2:提供群组名称。我们提供了com.javatpoint。

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

步骤4:添加依赖项: Spring WebSpring Boot Actuator。


org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-actuator

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

步骤6:解压缩下载的jar文件。

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

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

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

步骤8:在包com.javatpoint中创建一个Controller类。我们创建了一个名为DemoRestController的控制器类。

在Controller中,我们定义了一个名为hello()的方法,该方法返回字符串。

DemoRestController.java

package com.javatpoint;
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: selfhealthinfo,如下所示。

{"_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 Browser依赖项。


org.springframework.data
spring-data-rest-hal-browser

步骤12:再次,运行ActuatorAutoConfigurationExampleApplication.java文件。

要访问HAL浏览器,请在浏览器中键入http:// localhost:8080 ,然后按Enter键。

现在,我们可以通过HAL浏览器访问执行器。

在资源管理器的文本框中键入/驱动器,然后单击开始按钮。

它显示了与执行器有关的所有信息。促动器中最重要的是

当我们单击bean的箭头时,它将显示在Spring Boot项目中配置的所有bean。

上图显示了所有自动配置的和未自动配置的Bean的详细信息。