Spring Boot 自动配置

1. Spring Boot 自动配置

Spring Boot的自动配置是其核心特性之一,旨在简化Spring应用程序的配置过程。这个特性通过合理的默认值以及根据类路径和其他因素自动配置Spring Beans来极大地减少了配置的工作量。以下是Spring Boot自动配置的详细讲解:

基本原理

  • 条件化配置:Spring Boot使用了一种条件化的配置方法。这意味着它会在运行时检查某些条件(如类路径上的类、环境属性、系统属性等),基于这些条件决定是否应用某个配置。
  • @EnableAutoConfiguration 注解:这是Spring Boot自动配置的核心。当你使用 @SpringBootApplication 注解时,实际上包含了 @EnableAutoConfiguration。这个注解告诉Spring Boot开始扫描自动配置候选项。

自动配置的工作方式

  • 类路径扫描:Spring Boot会检查类路径上的库,根据这些库来决定需要配置哪些Bean。例如,如果类路径上有H2数据库的库,Spring Boot会自动配置一个内存数据库。
  • 配置类:Spring Boot有许多内置的配置类,这些类使用 @Conditional 相关注解来控制配置的应用。例如,DataSourceAutoConfiguration 类用于自动配置数据源。
  • 外部化配置:Spring Boot允许通过外部配置(如 application.propertiesapplication.yml 文件,环境变量等)来覆盖自动配置的默认值。这提供了高度的灵活性。

优点

  • 减少配置:自动配置大大减少了显式配置的需求,使得启动和运行Spring应用程序更加快速和简单。
  • 智能默认值:Spring Boot提供了许多合理的默认设置,这些设置通常适用于多数标准场景。
  • 易于重写:尽管自动配置提供了默认值,但它们很容易被开发者自己的配置所覆盖和调整。

如何控制自动配置

  • 排除特定的自动配置:可以使用 @EnableAutoConfiguration 注解的 exclude 属性来排除特定的自动配置类。
  • 使用 application.propertiesapplication.yml:可以在这些文件中定义属性来覆盖自动配置提供的默认值。
  • 了解自动配置报告:Spring Boot提供了一个自动配置报告,它可以告诉你哪些自动配置被应用,哪些没有,以及为什么。这可以通过启动时设置 --debug 标志来查看。

使用实例

假设你正在创建一个Web应用程序,且在类路径上有Spring Web MVC和Tomcat。在这种情况下,Spring Boot将自动配置Tomcat作为嵌入式服务器,并配置Spring MVC。

注意事项

  • 理解自动配置:虽然自动配置简化了很多设置,但完全理解它做了什么以及如何做的仍然很重要。这有助于更好地控制和调试应用程序。
  • 与显式配置结合:在某些情况下,可能需要将自动配置和显式配置结合使用,以满足特定的应用程序需求。

总而言之,Spring Boot的自动配置是一个强大的特性,它可以帮助开发者更快地搭建和配置Spring应用程序,同时保持了灵活性和控制力。

2. 结合Redis来理解自动配置的流程:

结合Redis来讲解Spring Boot自动配置的流程,我们可以通过以下步骤来理解这个过程:

1. 引入依赖

首先,在Spring Boot项目的pom.xmlbuild.gradle文件中加入Redis的依赖。例如,使用Maven时添加如下依赖:

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

这个依赖包含了Spring Data Redis和相关的库。

2. 类路径检测

当应用程序启动时,Spring Boot自动配置机制会检测类路径上的库。因为我们已经加入了spring-boot-starter-data-redis依赖,Spring Boot会检测到Redis相关的类和库。

3. 激活自动配置

由于@SpringBootApplication注解包含了@EnableAutoConfiguration,Spring Boot会尝试对所有在classpath中发现的组件进行自动配置。对于Redis来说,它会尝试自动配置与Redis交互所需的组件,如RedisTemplate和连接工厂等。

4. 条件化配置

Spring Boot使用条件化配置(通过@Conditional注解系列)来判断是否应该应用某个自动配置。例如,对于Redis,它可能会检查以下条件:

  • RedisAutoConfiguration是否在类路径上。
  • 是否存在配置来定义Redis服务器的连接细节,如主机名和端口。

5. 读取外部配置

Spring Boot会读取应用程序的配置文件(application.propertiesapplication.yml),以获取Redis服务器的配置信息,如主机名、端口、密码等。例如:

spring.redis.host=localhost
spring.redis.port=6379

如果未提供这些配置,Spring Boot会使用默认值(例如,默认端口为6379)。

6. 配置Bean

满足上述条件后,Spring Boot自动配置Redis相关的Bean。这通常包括:

  • RedisConnectionFactory:用于创建与Redis服务器的连接。
  • RedisTemplateStringRedisTemplate:用于在应用程序中方便地操作Redis。

7. 运行时使用

一旦这些Bean被自动配置,开发者就可以在应用程序中直接注入(例如,通过@Autowired)并使用它们来与Redis进行交互。

注意事项

  • 定制化配置:如果自动配置不完全符合你的需求,你可以通过定义自己的配置Bean来覆盖它们。
  • 版本兼容性:确保Spring Boot的版本与Redis依赖的版本兼容。
  • 了解自动配置原理:理解Spring Boot自动配置的工作原理有助于更好地控制和调试应用程序。

通过这个例子,你可以看到Spring Boot的自动配置是如何减少配置的复杂性和提高开发效率的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VueH5公众号分享到微信朋友圈或好友

场景需求&#xff1a; 一般分享场景是在当前页面分享当前页面&#xff0c;但是业务需求是&#xff0c;在当前页面分享好几个其他页面的链接到朋友圈和好友。 PS&#xff1a;微信自带的分享面板是无法第三方唤起的&#xff0c;只能点三个点。 其次在微信公众号页也不支持自定义…

redis---非关系型数据库

关系数据库与非关系型数据库 redis非关系型数据库&#xff0c;又名缓存型数据库。数据库类型&#xff1a;关系型数据库和非关系型数据库关系型数据库是一 个机构化的数据库,行和列。 列&#xff1a;声明对象。 行&#xff1a;记录对象属性。 表与表之间的的关联。 sql语句&…

Linux fork和vfork函数用法

fork和vfork是用于创建新进程的函数&#xff0c;在Linux的C语言编程中非常常见。 fork函数 fork函数是用于创建一个新的进程&#xff0c;新进程是调用进程的副本。新进程将包含调用进程的地址空间、文件描述符、栈和数据。在fork之后&#xff0c;父进程和子进程将并发执行。 …

【giszz笔记】产品设计标准流程【5】

&#xff08;续上回&#xff09; 目录 五、原型设计 1.写在前面的话 2.原型是什么 3.画原型的工具 4.产品经理的复合能力 5.关于原型图 PS&#xff1a;这个系列&#xff0c;主要讨论的是产品设计的一般标准流程。这个流程也许每天都发生在我们的身边&#xff0c;我们也常…

MatrixOne完成与麒麟信安、欧拉的兼容互认

近日&#xff0c;超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统&#xff08;openEuler简称“欧拉”&#xff09;、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证&#xff0c;通过了欧拉兼容性测评&#xff0c;获得了《openEuler技术测评证书》…

ByteBuffer

参考文章&#xff1a; 1、ByteBuffer常用方法详解_bytebuffer.wrap(data, offset, 4).getint()得到得值过大-CSDN博客

Pycharm run 输出界面控制一行能够输出的元素个数

Pycharm run 输出界面控制一行能够输出的元素个数 今天遇到了一个问题&#xff0c;当我们在 Pycharm 中打印输出数组时&#xff0c;如果数组一行的元素个数过多&#xff0c;那么我们在打印时就会出现以下问题。 代码如下&#xff1a; import numpy as npx np.array([[0., 0.7…

前端UI工具(主要适用于JAVa,layui+easyui+elementui等及UI对比)

一、常见前端UI工具 前端开发中有许多流行的UI工具和框架&#xff0c;它们提供了丰富的组件、样式和功能&#xff0c;有助于加速界面开发。以下是一些常用的前端UI工具和框架&#xff1a; Bootstrap: 描述&#xff1a; Bootstrap 是一个开源的前端框架&#xff0c;提供了一套用…

webstorm配置console.log打印

一、设置面板 打开设置面板(windows 快捷键&#xff1a; ctrl alt s) &#xff0c;找到 编辑器 -> 实时模板 -> JavaScript -> log&#xff0c;点击log会出现对应的配置 二、模板文本 将下面这些模板文本粘贴进去 console.info("&#x1f680; ~ file:$file…

es各种报错问题及解决方案20231121

报错一 org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [typesearch_phase_execution_exception, reasonall shards failed]Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://localhost:9200], URI [/wzx-te…

【VUE+Elemet 】正则验证 + 表单验证 + 注意事项

目录 一、正则验证 1.输入字母/数字/下划线&#xff1a; 2.请输入中英文/数字/下划线&#xff1a; 3.请输入中文/英文&#xff1a; 4.规范金额&#xff1a; 5.用户名不能全是数字: 6.中文&#xff1a; 7.非中文&#xff1a; 8.限制长度&#xff1a; 9.数字&#xff…

Gensim库——文本处理和主题建模的强大工具

在信息时代&#xff0c;海量的文本数据不断地涌现。如何从这如山如海的文本中提取有意义的信息&#xff0c;成为了一项关键任务。Python语言提供了许多优秀的库和工具来处理文本数据&#xff0c;其中一款备受推崇的工具就是Gensim库。Gensim是一个开源的Python库&#xff0c;它…

洗衣行业在线预约小程序源码系统 附带完整的搭建教程

目前&#xff0c;人们对生活品质的追求不断提高&#xff0c;但生活节奏却也不断加快。对品质的追求遇到了忙碌的生活节奏&#xff0c;人们更渴望以最简单、便捷的方式达到追求品质的目的。同时&#xff0c;由于线上支付的普及&#xff0c;大家更希望足不出户就可以解决自己生活…

“三面一体”的业务调度方案在运营商订单运营的实践

在当前信息化时代&#xff0c;运营商的业务流程复杂度和多样性持续增长&#xff0c;多个系统、部门以及相关事务需要进行高效准确的调度。如何在这样的背景下&#xff0c;保证业务流程的顺畅&#xff0c;业务信息的实时传递以及业务决策的准确性&#xff0c;是业务运营面临的重…

C#写入Datetime到SQL server

文章目录 运行测试插入Datetime 相关知识点Datetime转为字符串字符串转为Datetime彩蛋 运行测试 插入Datetime // 连接数据库操作 string connStr "Data Source[服务器名];" "Initial Catalog[数据库名];" "User ID [用户名];" "Passwor…

seleninum 基础及简单实践

网页自动化 1 Selenium自动化基础 1.1 Selenium简介 Selenium自动化流程如下&#xff1a; 自动化程序调用Selenium客户端库函数客户端库会发送Selenium命令&#xff0c;给浏览器的驱动程序浏览器驱动程序接收到命令后&#xff0c;驱动浏览器去执行命令浏览器执行命令浏览器驱…

Java基本数据类型与引用类型的区别

晒个小暖 南方人的冬天&#xff0c;太阳总是很赏脸&#xff0c;花花草草长得很漂亮&#xff0c;厚棉被晒得很舒服&#xff0c;腊肠腊肉腊鸭油光发亮&#xff0c;就这样站在日光下一会吧&#xff0c;你也会变得亮亮堂堂&#xff0c;和和融融。不管是不是冬天&#xff0c;没有什…

3.ubuntu20.04环境的ros搭建

ros搭建比较简单&#xff0c;主要步骤如下&#xff1a; 1.配置ros软件源&#xff1a; sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list 2.配置密钥 sudo apt-key adv --keyser…

NO8---蓝桥杯JAVA--- 斐波那契升级版

斐波那契数列大家都非常熟悉。它的定义是&#xff1a; f(x)1....(x1,2) f(x)f(x−1)f(x−2)....(x>2) 对于给定的整数 n和 m&#xff0c;我们希望求出&#xff1a; f(1)f(2)…f(n)的值。 但这个值可能非常大&#xff0c;所以我们把它对 f(m) 取模。 但这个数字依然很大&…