百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

springcloud实战:springboot的核心原理

wptr33 2024-12-07 17:45 11 浏览

Spring Boot核心原理

通过上篇的学习,读者应该对Spring Boot有了一个大致的认识,利用Spring Boot可以极大地简化应用程序的开发,这都归功于Spring Boot的四大核心原理:起步依赖、自动配置、Actuator和Spring Boot命令行。

本篇中,我们将深入探讨Spring Boot 的核心原理,以便读者能更好地学习和使用Spring Boot。

起步依赖机制

我们在使用Spring Boot搭建框架时,使用最频繁的特性就是起步依赖。所谓起步依赖,其本质是Maven项目的对象模型,通过传递依赖,我们很容易集成第三方框架。

起步依赖最明显的特征就是它的名称中包含starter,比如要集成Spring MVC 时,只需要添加spring-boot-starter-web 依赖即可。通过它的名称就可以看出,该依赖主要用于提供 Web支持。如果你曾使用过原生的Spring MVC框架,应该知道,我们需要添加很多依赖包才能正确集成SpringMVC。而在Spring Boot 中,我们无须添加这些依赖,因为Spring MVC的所有依赖包都包含在spring-boot-starter-web 中。

起步依赖还有一个好处,那就是版本管理。往常如果我们要集成一个第三方框架,需要知道它的版本号以及Maven如何依赖它,如果该第三方框架升级,还需要手动修改版本号并考虑是否存在版本冲突等问题。而通过添加 spring-boot-starter依赖,这一切都迎刃而解了。

Spring Boot的起步依赖的原则是,所有正式的启动程序都应遵循spring-boot-starter-*的命名格式。许多IDE中的 Maven集成允许按名称搜索依赖项。例如,安装了适当的Eclipse或STS插件后,你可以在POM Editor按下“Ctrl+空格”组合键,然后键入spring boot starter获得完整的框架列表。SpringBoot 官方集成了目前最流行的大多数应用程序框架,当我们希望集成某种功能时,只需要在官网( https://spring.io)或IDE中搜索对应依赖项并导入到应用即可。

图3-1列举了Spring Boot官方集成的一些第三方框架。

当然,如果我们在使用某种功能时,官方没有对应的starter依赖,也可以自定义starter满足需求。注意,我们在自定义时,命名通常以项目名开始,而不应该以spring-boot开始,因为它是为官方的SpringBoot构建而保留的。例如名为thirdpartyproject 的第三方启动程序项目通常命名为thirdpartyproject-spring-boot-starter。

Spring Boot起步依赖的核心思想其实就是依赖传递。如果我们需要自定义starter依赖,只需要按照官方对starter 的命名规则创建一个工程,然后将我们期望的依赖包添加进工程并发布到本地仓库或服务器上的 Maven私服即可。这样我们在应用中只需依赖自定义的starter 即可。

自动配置管理

Spring Boot 另一个非常强大的特性就是自动配置管理,通过该特性,我们可以在程序启动时向Spring容器中导入很多配置信息。在传统的Spring MVC架构中,我们一般通过烦琐的XML文件导入配置或注入 Bean;而在 Spring Boot中,这一切都将成为历史。

其实在第2章中,我们已经接触到了它。当创建一个Spring Boot应用时,都会提供一个启动类,该类添加了@SpringBootApplication注解,注解内部包含了@EnableAutoConfiguration注解,它便是Spring Boot的自动配置管理器。通过添加@EnableAutoConfiguration注解,可以自动加载配置信息。

以端口设置为例,我们在application.yml中通过server.port 定义好端口后,Spring Boot应用启动时就会设置为该端口号,那么它是如何实现的呢?其实,application.yml中的所有配置文件最终都会转化为实体类。Spring Boot 会将配置属性的实体类的名称以Properties结尾,放在org.springframework.boot.autoconfigure包下。server. port对应的实体类就是ServerProperties,其源码如下:

该类首先加入了@ConfigurationProperties注解,其作用就是定义配置属性,其中 prefix是属性前缀,这里为server。因此,server. port对应的就是ServerProperties类的 port字段,在程序启动时,Spring Boot配置管理器会自动将server. port装载到ServerProperties类的port字段中。

通过这种方式,我们完全可以“依葫芦画瓢”,在application.yml中定义自己的配置属性,并通过Spring Boot自动配置管理特性将其实例化到自定义类中。例如,我们在集成第三方平台时,一般都会要求传入appKey和 appSecret,这时就可以将它们定义到application.yml中,如:

然后创建Properties类以便提取配置信息,代码如下:

这里首先将前缀设置为third,注意字段名和 application.yml 中定义的属性名要一致(驼峰命名的允许转为用短横线隔开,如 appKey可以写成app-key )。此外,必须添加@Component注解,否则无法装载到Spring容器中,这样我们就可以通过@Autowired注解注入并使用它,如:

@Autowired
private ThirdProperties thirdProperties;

Actuator监控管理

Actuator是 Spring Boot的一个非常强大的功能,它可以实现应用程序的监控管理,比如帮助我们收集应用程序的运行情况、监测应用程序的健康状况以及显示HTTP跟踪请求信息等。它是我们搭建微服务架构必不可少的环节,是整个系统稳定运行的保障。

在Spring Boot中,集成Actuator也比较简单,只需要在pom.xml中添加以下依赖即可:

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

Actuator 内置有很多端点( endpoint ),我们通过这些端点可以获得不同的监控信息。但Actuator默认只开启health和info两个端点。如果要开启更多的端点,可以通过以下配置实现:

management:
endpoints:
web:
exposure:
include: '*'

其中,'*'表示开启所有端点。当然,也可以指定开启的端点,如:

management:
endpoints:
web:
exposure:
include: health,info,httptrace

上述配置表示开启health、info和 httptrace端点。这时启动应用程序,访问地址 localhost:8081/demo/actuator/health,读者通常会在浏览器中看到如图3-2所示的界面。

上述界面提示为406,Not Acceptable,说明不能访问该地址。为了解决这个问题,在Spring Boot应用中,还需要在webConfig类中添加@EnablewebWvc注解,该注解表示启用WebMVC。之后重启应用并访问health端点,就可以看到如图3-3所示的界面,其中 status为UuP说明当前系统正常运行。

表3-1列举了Actuator内置的端点及其功能。

Spring Boot CLI命令行工具

Spring Boot CLI ( Command Line Interface)是一款用于快速搭建基于Spring原型的命令行工具。它支持运行Groovy脚本,这意味着你可以拥有一个与Java语言类似的没有太多样板代码的语法。通过CLI来使用Spring Boot 不是唯一方式,但它是让Spring应用程序“脱离地面”的最快速方法。

安装

要使用CLI,首先应从Spring官方仓库上下载CLI的 release版本,地址是 https:/repo.spring.iol/release/org/springframework/boot/spring-boot-cli/2.0.3.RELEASE/spring-boot-cli-2.0.3.RELEASE-bin.zip。

下载完成并解压后,打开spring-2.0.3.RELEASE文件夹,进入 bin目录,可以看到两个脚本文件,其中 spring用于Linux平台,spring.bat用于Windows平台。Spring Boot CLI依赖Groovy,但是我们不用单独安装它,因为它已经包含到Spring Boot CLI的依赖中了。

可以先将 spring.bat设置到环境变量中,如图3-4所示。

然后打开cmd命令行工具,输入spring --version,可以查看当前Spring Boot CLI的版本号,如:

C:AUsers\lynn>spring --version
Spring CLI v2.0.3.RELEASE

这样Spring Boot CLI就安装完成了。

用法

前面提到过,我们可以通过运行Groovy脚本来快速构建Spring Boot应用。因此,需要先创建一个Groovy脚本文件,并编写以下代码:

@RestController
class HelloController {
@RequestMapping("/")def home() {
"Hello World! "
}
}

上述代码和Java语法很像,它其实就是Groovy脚本代码。看这样一段代码,读者是否似曾相似呢?没错,它和我们编写的控制器类的代码是一样的,编写好这段代码并运行命令:

spring run app.groovy

其中,app.groovy就是你编写的Groovy脚本文件名。第一次启动时,Spring Boot CLI会下载很多依赖包,因此可能需要等待一段时间,启动完成后,访问localhost:8080,浏览器就会打印 Hello World!。

当然,如果读者对Groovy的语法不是很熟悉,我们还可以编写Java代码,如:

@RestController
public class Hellocontroller {
@RequestMapping("/")
public String home() {
return "Hello world ! "
}
}

需要注意的是,文件后缀需要改成.java,然后运行命令 spring run app.java即可。

小结

Spring Boot最核心的部分不外乎起步依赖机制、自动配置管理、Actuator监控管理和Spring BootCLI命令行工具,本章对它们分别进行了剖析。通过对四大核心的研究,读者应该对Spring Boot有了更深的了解,并为后面学习Spring Cloud打下坚实的基础。

本文给大家讲解的内容是springcloud实战:springboot核心原理

  1. 下篇文章给大家讲解的是springcloud实战:探索springcloud的秘密;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持

相关推荐

Git 的设计:版本管理的天才之作

Git的设计之所以被称为“天才”,是因为它通过一系列**革命性的理念**和**精妙的工程实现**,完美解决了版本控制中的核心痛点。以下是其设计精髓的深度解析:---###一、**颠覆传统的核心设计...

IDEA上如何重新设置git账号密码

修改git账号密码,使用IDEA拉取项目的文件,出现如下错误信息。fatal:unabletoaccess'http://192.168.105.101:8901/XX/XX-XX-p...

在IDEA中利用ignore插件忽略Git非必要提交的文件

迎关注我的头条号:Wooola,10年Java软件开发及架构设计经验,专注于Java、Go语言、微服务架构,致力于每天分享原创文章、快乐编码和开源技术。前言在IEDA中,使用Maven建多工程编写代码...

Git入门系列之分支切换完全指南

在Git中切换分支时,若存在未提交的修改,需谨慎处理以避免数据丢失。主要注意事项包括:1)通过gitstatus检查当前修改;2)优先使用gitstash暂存修改再切换;3)可提交修...

解决Git推送提交时&#39;src refspec master does not match any&#39;错误

技术背景在使用Git进行代码管理时,我们经常会遇到各种问题。其中,“srcrefspecmasterdoesnotmatchany”错误是一个比较常见的问题。当我们尝试使用...

修改git提交的用户名

在我们项目中,新手同学们往往由于不当操作导致提交的用户名填写错误,当我们用户名填写错误的时候可以通过命令修改。获取当前用户名:gitconfiguser.name...

在项目管理中,自动关联Git代码提交,集成Gitlab/码云/Git等

不再让开发提交的代码成为“黑洞”在软件开发过程中,会有一个问题和担心,就是不知道开发人员提交的代码质量如何,规范怎样。更为让人痛苦的莫过于当时某个功能需求改了什么代码,根本无人知道。今天,分享一个工具...

常用的十五个Git命令汇总?

Git是一个分布式的版本管理系统,在开发中被广泛应用于代码版本的管理,下面就是在日常开发中常用的一些Git命令以及其示例操作,如下所示,我们就来一起看看吧!gitinit用于初始化一个新的Git仓库...

git修改已提交记录的用户信息

背景介绍因为使用的是个人电脑,配置的git全局config的用户信息是和github的账户一致的。新下载的工作git,由于没有单独设置局部的用户信息,导致提交记录使用的是github用户,在push代...

刚来公司,大佬让我Git下 我该怎么办?

我们在开发过程中,都会用到版本控制工具。常用的工具有SVNGIt等。但现在越来越多的人喜欢用Git。本文为你介绍新手如何快速上手Git。创建自己的远程仓库远程仓库,顾名思义。就是将自己的代码放到远程服...

腾讯自研Git客户端,助力每个人都可以轻松使用Git

...

Git+Maven+Sonar实现提交代码前进行代码的质量检查

Git+Maven+Sonar实现提交代码前进行代码的质量检查一、前言为了规范代码质量,使开发人员写出更高质量的代码,实践了一下git-hooks中的pre-commit钩子,可以在提交代码时强制校验...

Git Rebase

本文档将深入讨论gitrebase命令。Rebase命令在设置仓库和重写历史页面中也有涉及。本页将更详细地介绍gitrebase的配置和执行。这里将涵盖常见的Rebase使用场景和注...

Git提交规范

一、分区存储...

git合并分支时禁止合并特定文件

问题:1.在日常开发过程中经常会遇到多环境,但是环境文件不同的情况,导致每次切换git环境时候非常麻烦,可能会提交上来不需要提交的文件,一个文件来回提交修改。场景:...