• 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: '*'

     

  • 相关阅读:
    Go语言基础介绍
    webpack教程——css的加载
    Git忽略规则.gitignore梳理
    vue2.0路由-适合刚接触新手简单理解
    JAVA实现DES加密实现详解
    计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解
    Storm:最火的流式处理框架
    神片和神回复
    论C#未来发展
    弄清UTF8和Unicode
  • 原文地址:https://www.cnblogs.com/yjh1995/p/14164457.html
Copyright © 2020-2023  润新知