深入浅出springboot的核心原理(下)
什么是 Starter
Starter是Spring Boot中的一个非常重要的概念,Starter 相当于模块,它能将模块所需的依赖整合起来并对模块内 的Bean根据环境( 条件)进行自动配置。使用者只需要 依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。 在上一节课中,我们在Maven的依赖中加入spring-boot-starter-web 就能使项目支持 Spring MVC,并且 Spring Boot还为我们做了很多默认配置,无需再依赖spring-web、 spring-webmvc等相关包及做相关配置就能够立即使用起 来
SpringBoot 存在很多开箱即用的 Starter 依赖,使得我们 在开发业务代码时能够非常方便的、不需要过多关注框架 的配置,而只需要关注业务即可;
spring-boot-starter-logging
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.8.RELEASE</version>
<exclusions>
<exclusion><!--排除spring-boot-starter-logging日志依赖-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
SpringBoot 另一大神器-Actuator
微服务应用开发完成以后,最终目的是为了发布到生产环 境上给用户试用,开发结束并不意味着研发的生命周期结 束,更多的时候他
只是一个开始,因为服务在本地测试完 成以后,并不一定能够非常完善的考虑到各种场景。所以 需要通过运维来保障服务的稳定。
在以前的传统应用中,我们可以靠人工来监控。但是微服务中,几千上万个服务,我们需要了解每个服务的健康状 态,
就必须要依靠监控平台来实现。所以在 SpringBoot 框架中提供了 spring-boot-starter-actuator 自动配置模块来支持对于
SpringBoot 应用的监控;
Actuator
Spring Boot Actuator 的关键特性是在应用程序里提供众 多 Web 端点,通过它们了解应用程序运行时的内部状况。
有了Actuator,你可以知道Bean在Spring应用程序上下 文里是如何组装在一起的,掌握应用程序可以获取的环境属性信息
在spring-boot项目中,添加actuator的一个starter。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Actuator 提供的 endpoint
启动服务之后,可以通过下面这个地址看到actuator提供 的所有Endpoint地址
http://localhost:8080/actuator 可以看到非常多的Endpoint。 有一些Endpoint是不能访 问的,涉及到安全问题。
如 果 想 开 启 访 问 那 些 安 全 相 关 的 url ,可以在 application.xml中配置, 开启所有的endpoint
management.endpoints.web.exposure.include=*
health
针对当前SpringBoot应用的健康检查,默认情况下,会通 过“up”或者“down”; 可以基于下面这个配置,来打印heath 更详细的信息
management.endpoint.health.show-details= always
Loggers
显示当前 spring-boot 应用中的日志配置信息,针对每个 package对应的日志级别 beans 获取当前spring-boot应用中IoC容器中所有的bean
Dump 获取活动线程的快照
Mappings 返回全部的uri路径,以及和控制器的映射关系
conditions 显示当前所有的条件注解,提供一份自动配置生效的条件
情况,记录哪些自动配置条件通过了,哪些没通过
shutdown 关闭应用程序,需要添加这个配置:
management.endpoint.shutdown.enabled=true
这个Endpoint是比较危险的,如果没有一定的安全保 障,不要开启 Env 获取全部的环境信息
关于 health 的原理
应用健康状态的检查应该是监控系统中最基本的需求,所 以我们基于health来分析一下它是如何实现的。 SpringBoot 预先通过
org.springframework.boot.actuate.autoconfigure.health. HealthIndicatorAutoConfiguration 这个就是基于spring-boot的自动装配来载入的。
所以,我们可以在 actuator-autoconfigure 这个包下找到 spring.factories。
Actuator 中提供了非常多的扩展点,默认情况下提供了一 些常见的服务的监控检查的支持。
DataSourceHealthIndicator
DiskSpaceHealthIndicator
RedisHealthIndicator …
其中,有一些服务的检查,需要依赖于当前应用是否集成 了对应的组件,比如 redis,如果没有集成,
那么 RedisHealthIndicatorAutoConfiguration 就不会被装载。 因为它有condition的条件判断
Actuator 对于 JMX 支持
除了REST方式发布的Endpoint,Actuator还把它的端点 以JMX MBean的方式发布出来,可以通过JMX来查看和 管理。
操作步骤
在cmd中输入jconsole,连接到spring-boot的应用
就可以看到 JBean 的信息以及相应的操作。比如可以在操 作菜单中访问shutdown的endpoint来关闭服务
什么是 JMX
JMX全称是Java Management Extensions。 Java 管理扩 展。 它提供了对Java应用程序和JVM的监控和管理功能。 通过JMX,我们可以监控
1. 服务器中的各种资源的使用情况,CPU、内存
2. JVM内存的使用情况
3. JVM线程使用情况 比如前面讲的 Actuator 中,就是基于 JMX 的技术来实现
对endpoint的访问