Spring Boot自动配置项目示例图文详解

本文概述

  • 需要自动配置
  • 禁用自动配置类
  • 调试自动配置
Spring Boot自动配置根据我们添加的jar依赖项自动配置Spring应用程序。
例如, 如果H2数据库Jar存在于类路径中, 并且我们尚未手动配置与数据库相关的任何bean, 则Spring Boot的自动配置功能会在项目中自动对其进行配置。
我们可以使用批注@EnableAutoConfiguration启用自动配置功能。但是此注释不使用, 因为它包装在@SpringBootApplication注释内。注释@SpringBootApplication是三个注释的组合:@ ComponentScan, @ EnableAutoConfiguration和@Configuration。但是, 我们使用@SpringBootApplication批注而不是使用@EnableAutoConfiguration。
【Spring Boot自动配置项目示例图文详解】@ SpringBootApplication = @ ComponentScan + @ EnableAutoConfiguration + @ Configuration
当我们在项目中添加spring-boot-starter-web依赖项时, Spring Boot自动配置会在类路径中查找Spring MVC。它会自动配置dispatcherServlet, 默认错误页面和Web jar。
类似地, 当我们添加spring-boot-starter-data-jpa依赖项时, 我们看到Spring Boot自动配置会自动配置数据源和实体管理器。
所有自动配置逻辑都在spring-boot-autoconfigure.jar中实现, 如下图所示。
Spring Boot自动配置项目示例图文详解

文章图片
需要自动配置 基于Spring的应用程序需要大量配置。使用Spring MVC时, 我们需要配置调度程序servlet, 视图解析器, Web jar等。以下代码显示了Web应用程序中调度程序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="http://www.srcmini.com/${db.driver}" /> < property name="jdbcUrl" value="http://www.srcmini.com/${db.url}" /> < property name="user" value="http://www.srcmini.com/${db.username}" /> < property name="password" value="http://www.srcmini.com/${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>

配置实体管理器工厂
< beanclass="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"id="entityManagerFactory"> < property name="persistenceUnitName" value="http://www.srcmini.com/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.srcmini。
第3步:提供工件ID。我们提供了spring-boot-autoconfiguration-example。
步骤4:添加依赖项:Spring Web, Spring Data JPA, H2数据库。
步骤5:点击Generate(生成)按钮。当我们单击Generate按钮时, 它将项目封装在Jar文件中并将其下载到本地系统。
Spring Boot自动配置项目示例图文详解

文章图片
步骤6:提取Jar文件并将其粘贴到STS工作区中。
步骤7:将项目文件夹导入STS。
文件-> 导入-> 现有Maven项目-> 浏览-> 选择文件夹spring-boot-autoconfiguration-example-> 完成
导入需要一些时间。
步骤8:在src / main / java文件夹中创建一个名称为com.srcmini.controller的包。
步骤9:在包com.srcmini.controller中创建一个名称为ControllerDemo的Controller类。
ControllerDemo.java
package com.srcmini.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controllerpublic class ControllerDemo {@RequestMapping("/")public String home(){return "home.jsp"; }}

步骤10:在文件夹src / main / java中创建另一个名为com.srcmini.model的包。
步骤11:在com.srcmini.model包中创建一个名为User的类。
User.java
package com.srcmini.model; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity@Table(name="userdata")public class User {@Idprivate 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; }@Overridepublic String toString() {return "User [id=" + id + ", uname=" + username + "]"; }}

现在我们需要配置H2数据库。
步骤12:打开application.properties文件并配置以下内容:端口, 启用H2控制台, 数据源和URL。
application.properties
server.port=8085spring.h2.console.enabled=truespring.datasource.plateform=h2spring.datasource.url=jdbc:h2:mem:srcmini

步骤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文件。在ControllerDemo.java中, 我们返回了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> Insert title here< /title> < /head> < body> < form action="addUser"> ID :< br /> < input type="text" name="t1"> < br /> User name :< br /> < input type="text" name="t2"> < br /> < input type="submit" value="http://www.srcmini.com/Add"> < /form> < /body> < /html>

步骤16:运行SpringBootAutoconfigurationExampleApplication.java文件。我们可以在控制台中看到我们的应用程序已在端口8085上成功运行。
Spring Boot自动配置项目示例图文详解

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

文章图片
我们也可以通过单击” 测试连接” 按钮来测试连接。如果连接成功, 则显示消息” 测试成功” 。
步骤18:点击Connect(连接)按钮。它显示了我们在User.java文件中定义的表userdata的结构。
Spring Boot自动配置项目示例图文详解

文章图片
步骤19:执行以下查询以查看我们已插入到data.sql文件中的数据。
SELECT * FROM USERDATA;

Spring Boot自动配置项目示例图文详解

文章图片
让我们仔细看一下控制台。我们看到TransactionManagement, DispatcherServlet, EntityManagerFactory和DataSource是自动配置的, 如下图所示。
Spring Boot自动配置项目示例图文详解

文章图片
调试自动配置 我们可以通过以下两种方式找到有关自动配置的更多信息:
  • 打开调试日志记录
  • 使用Spring启动执行器
打开调试日志记录
我们可以通过在application.properties文件中添加属性来调试日志记录。让我们在上面的示例中实现调试日志记录。打开application.properties文件, 并添加以下属性:
logging.level.org.springframework: DEBUG

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

文章图片
负匹配
Spring Boot自动配置项目示例图文详解

文章图片
Spring启动器
我们还可以通过在项目中使用Actuator调试自动配置。我们还将添加HAL浏览器以使事情变得容易。它显示了自动配置的所有Bean的详细信息, 而未配置的详细信息。
让我们创建一个Spring Boot Actuator的示例。
步骤1:打开Spring Initializr http://start.spring.io。
步骤2:提供群组名称。我们提供了com.srcmini。
第3步:提供工件ID。我们提供了执行器自动配置示例。
步骤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部分中看到以下目录结构。
Spring Boot自动配置项目示例图文详解

文章图片
步骤8:在包com.srcmini中创建一个Controller类。我们创建了一个名为DemoRestController的控制器类。
在Controller中, 我们定义了一个名为hello()的方法, 该方法返回一个字符串。
DemoRestController.java
package com.srcmini; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestControllerpublic class DemoRestController {@GetMapping("/hello")public String hello() {return "Hello User, have a nice day."; }}

步骤9:运行ActuatorAutoConfigurationExampleApplication.java文件。
步骤10:打开浏览器并调用URL http:// localhost:8080 / hello。它返回我们在控制器中指定的字符串。
Spring Boot自动配置项目示例图文详解

文章图片
现在调用执行器URL http:// localhost:8080 / actuator。它将启动执行器, 该执行器显示三个URL:自我, 健康和信息, 如下所示。
{"_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依赖项。
< dependency> < groupId> org.springframework.data< /groupId> < artifactId> spring-data-rest-hal-browser< /artifactId> < /dependency>

步骤12:再次, 运行ActuatorAutoConfigurationExampleApplication.java文件。
要访问HAL浏览器, 请在浏览器中键入http:// localhost:8080, 然后按Enter键。
Spring Boot自动配置项目示例图文详解

文章图片
现在我们可以通过HAL浏览器访问执行器。
在资源管理器的文本框中输入/ actuator, 然后单击执行按钮。
Spring Boot自动配置项目示例图文详解

文章图片
它显示了与执行器有关的所有信息。促动器中最重要的是豆。
Spring Boot自动配置项目示例图文详解

文章图片
当我们单击bean的箭头时, 它显示了Spring Boot项目中配置的所有bean。
Spring Boot自动配置项目示例图文详解

文章图片
上图显示了所有自动配置的和未自动配置的Bean的详细信息。
下载自动配置示例项目
下载执行器自动配置示例项目

    推荐阅读