• 深入浅出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的访问
  • 相关阅读:
    js压缩、混淆和加密 Alan
    与、或、异或运算 Alan
    Hello world Alan
    abstract class和interface有什么区别?
    接口是否可继承接口? 抽像类是否可实现(implements)接口? 抽像类是否可继承实体类(concrete class)?
    启动一个线程是用run()还是start()?
    数组有没有length()这个方法? String有没有length()这个方法?
    swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
    当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
    简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。
  • 原文地址:https://www.cnblogs.com/zpp1234/p/13203668.html
Copyright © 2020-2023  润新知