前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot自动配置

springboot自动配置

作者头像
叔牙
发布2020-11-19 15:22:19
5520
发布2020-11-19 15:22:19
举报
文章被收录于专栏:一个执拗的后端搬砖工

springboot自动配置

Spring Boot的一个强大功能是它能够根据我们添加到类路径中的jar依赖项自动配置我们的应用程序。 在这篇文章中,我们将介绍Spring Boot自动配置功能,并了解它如何在开发周期中提供帮助。

介绍

可以从提出非常简单的问题开始,为什么我们需要Spring Boot自动配置? 在我们的应用程序中使用Spring Boot有什么好处? 为了更好地回答这些问题,我们来看看创建一个没有Spring Boot的简单Spring MVC应用程序所需的配置:

<beans:beans> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> <beans:bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <beans:property name="defaultLocale" value="en"></beans:property> </beans:bean> <!-- other configuration --> </beans:beans>

我们还需要在web.xml文件中配置请求分发servlet作为配置的一部分。 对于数据库应用程序,我们需要Hibernate/JPA的其他配置以及数据源和其他配置。

在企业Spring应用程序中,这些配置可能会变得非常复杂,我们可能最终会配置很多东西来启动我们的应用程序。

1

什么是自动配置

倘若系统可以根据类路径中的jar提供一些默认设置以及根据我们的要求覆盖它的选项会怎样:

  • web应用程序有默认servlet容器
  • 系统会为我们配置默认的请求分发servlet

Spring Boot自动配置提供了这些能力。自动配置将尝试根据类路径中的jar自动尝试使用默认行为设置我们的应用程序。 例如,如果Spring Boot在类路径中找到HSQLDB,它将自动为我们配置内存数据库。将自动配置思想作为一个智能系统,可以根据配置的jar提供给我们的应用程序,我们的类路径。

2

自动配置实际应用

要了解Spring Boot自动配置内部如何工作,我们可以使用Spring Boot创建Spring MVC应用程序,使用Spring Boot创建web应用程序。

运行MVC应用程序并查看控制台,你可能会在控制台中找到类似的输出:

2018-11-27 11:30:28.642 [main] INFO 2018-11-27 11:30:28.642 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.34 2018-11-27 11:30:28.646 [localhost-startStop-1] INFO org.apache.catalina.core.AprLifecycleListener - The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/typhoon/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.] 2018-11-27 11:30:28.729 [localhost-startStop-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext 2018-11-27 11:30:28.729 [localhost-startStop-1] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 1383 ms 2018-11-27 11:30:29.217 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'characterEncodingFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'webMvcMetricsFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'httpPutFormContentFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'requestContextFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'httpTraceFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.ServletRegistrationBean - Servlet dispatcherServlet mapped to [/]

在示例应用程序中,我们从未为部署定义任何请求分发servlet或配置的tomcat,但是我们仍然可以在控制台中找到映射servlet:'dispatcherServlet'到[/],这是因为我们在应用程序中的pom.xml中添加了spring-boot-starter-web:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

这个案例演示了自动配置的功能和特性,在我们的应用程序中添加此启动器时,Spring Boot自动配置知道我们正在构建MVC应用程序,并且它在Spring MVC Web应用程序的类路径中添加了所有必需的依赖项。

这将提前为我们自动配置了DispactherServlet,CharacterEncodingFilter,RequestContextFilter甚至错误页面(我们从未对这些进行任何配置)。 Spring Boot将根据pom文件中添加的Spring Boot Starters添加类似的配置。

3

自动配置详细信息

接下来我们检查自动配置在内部如何工作,使用IDE(Eclipse或IntelliJ等)检查添加到类路径的内容:

如上面的屏幕截图所示,Spring Boot会自动为我们添加依赖项,以确保我们已准备好使用应用程序。

3.1:spring.factories

要为我们的应用程序启用自动配置,我们可以在我们的应用程序中使用@AutoConfiguration或@SpringBootApplication注解,查看spring-boot-autoconfigure.jar下/ META-INF目录下的spring.factories属性文件:

此文件包含将由Spring Boot自动启用的自动配置类的列表。 以下是spring.factories文件的示例输出:

# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\ org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\ org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\ org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\ org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\

自动配置类大致如下:

@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @Configuration @ConditionalOnWebApplication @ConditionalOnClass(DispatcherServlet.class) @AutoConfigureAfter(EmbeddedServletContainerAutoConfiguration.class) public class DispatcherServletAutoConfiguration { //configuration code }

注解和其他详细信息在本篇中不做过多的描述。

输总结

在这篇文章中,我们介绍了Spring Boot自动配置功能,简单分析了Configurationation的一些有趣功能以及它在内部的工作原理。

Spring Boot自动配置的比较好的点是它具有无创性,你可以通过自定义自己的配置以替换默认自动配置。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档