springboot学习(九)自动装配和Actuator

自动装配

Spring Boot大量使用XxxAutoConfiguration来使得许多组件被自动化配置并创建,而这些创建过程又大量使用了Spring的Conditional功能

当我们引入spring-boot-starter-jdbc,Spring Boot启动时会自动扫描所有的XxxAutoConfiguration

  • DataSourceAutoConfiguration:自动创建一个DataSource,其中配置项从application.ymlspring.datasource读取;

  • DataSourceTransactionManagerAutoConfiguration:自动创建了一个基于JDBC的事务管理器;

  • JdbcTemplateAutoConfiguration:自动创建了一个JdbcTemplate

当我们引入spring-boot-starter-web时,自动创建了:

  • ServletWebServerFactoryAutoConfiguration:自动创建一个嵌入式Web服务器,默认是Tomcat;

  • DispatcherServletAutoConfiguration:自动创建一个DispatcherServlet

  • HttpEncodingAutoConfiguration:自动创建一个CharacterEncodingFilter

  • WebMvcAutoConfiguration:自动创建若干与MVC相关的Bean

  • ...

Spring Boot自动装配功能是通过自动扫描+条件装配实现的,这一套机制在默认情况下工作得很好,但是,如果我们要手动控制某个Bean的创建,就需要详细地了解Spring Boot自动创建的原理,很多时候还要跟踪XxxAutoConfiguration,以便设定条件使得某个Bean不会被自动创建。

使用Actuator

在生产环境中,需要对应用程序的状态进行监控。前面我们已经介绍了使用JMX对Java应用程序包括JVM进行监控,使用JMX需要把一些监控信息以MBean的形式暴露给JMX Server,而Spring Boot已经内置了一个监控功能,它叫Actuator。

使用Actuator非常简单,只需添加如下依赖:

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

然后正常启动应用程序,Actuator会把它能收集到的所有信息都暴露给JMX。此外,Actuator还可以通过URL/actuator/挂载一些监控点,例如,输入http://localhost:8080/actuator/health,我们可以查看应用程序当前状态:

{
   "status": "UP"
}

许多网关作为反向代理需要一个URL来探测后端集群应用是否存活,这个URL就可以提供给网关使用。

Actuator默认把所有访问点暴露给JMX,但处于安全原因,只有healthinfo会暴露给Web。Actuator提供的所有访问点均在官方文档列出,要暴露更多的访问点给Web,需要在application.yml中加上配置:

management:
endpoints:
  web:
    exposure:
      include: info, health, beans, env, metrics

要特别注意暴露的URL的安全性,例如,/actuator/env可以获取当前机器的所有环境变量,不可暴露给公网。

actuaor配置

management:
 # 端点信息接口使用的端口,为了和主系统接口使用的端口进行分离
server:
  port: 8090
  servlet:
    context-path: /sys
 # 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况
endpoint:
  health:
    show-details: always
 # 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点
endpoints:
  web:
    exposure:
      include: '*'

 

posted @ 2020-12-20 18:34  hjy1995  阅读(208)  评论(0编辑  收藏  举报