美文网首页
基础篇-SpringBoot那些事

基础篇-SpringBoot那些事

作者: jimmyz81 | 来源:发表于2022-04-06 17:01 被阅读0次

    <SpringBoot那些事>

    以历代Spring Framework的进步为基础,Spring Boot实现配置自动化,依赖更简单,监控更容易,Spring Boot项目也是普通的Spring项目,只是他们正好用到了Spring Boot的起步依赖和自动配置而已,Spring Boot精要:

    自动配置

    Spring支持Java配置和XML配置,他们为应用程序开启了特定的特性和功能,SpringBoot实现了自动配置,可以减少配置负担。

    自动配置=spring-boot-autoconfigure+condition
    没什么特别的,自动配置并不是智能配置,也是通过一个一个的配置文件实现的,Spring Boot把这些繁琐的工作处理了。我们看一个例子:

    @Configuration
    @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class})
    @EnableConfigurationProperties(DataSourceProperties.class)
    @Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class })
    public class DataSourceAutoConfiguration {...}

    @Configuration表明它是一个bean,可以被加载到spring上下文,条件是@ConditionalOnClass 必须要有DataSource和EmbeddedDatabaseType

    自动配置很好,很强大,自由选择同样重要
    - 覆盖Spring Boot自动配置,覆盖配置很简单,直接显式地写一段配置即可

    @Bean
    @ConditionalOnMissingBean(JdbcOperations.class)
    public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(this.dataSource); }

    @ConditionalOnMissingBean意思就是当前不存在JdbcOperations类型(JdbcTemplate实现了该接口)的bean时才生效,你自定义了JdbcTemplate就会覆盖系统的自动配置

    - 通过属性文件外置配置,Spring Boot提供了多种设置途径,常用包括如下,按优先级排列,越前优先级越高

    > 命令行参数:可以配置与环境相关的参数,可以保证jar一致,环境不同获取参数不同
    > JVM参数,环境变量:配置相关JVM参数,比如:java -Dserver.port=8080
    > 位于文件系统中的配置文件application.properties或者application.yml,可以设置在运行目录的/config下或运行目录中, 比如:spring.port=8080
    > 固化到代码中的配置项,比如一些默认值等

    - XML配置的特殊用处

    目前通用的做法是通过Java Config来配置依赖,我们也可以通过XML来做一些有趣的事情,比如:

    某个模块没有依赖Spring包,或者不想引入Spring包(为了减少依赖)我们可以通过xml进行配置,然后通过ImportResource在运行时加入Spring IoC容器中,具体见<基础篇-Spring必须知道的>

    - 优化SpringBootApplication

    默认情况,我们会使用@SprigBootApplication注解自动获取应用的配置信息,使用这个注解会触发自动配置和组件扫描
    > 导致启动时间变长,加载了无用的自动配置,浪费cpu
    > 加载不需要的多余实例,浪费内存

    如何避免自动扫面带来的问题
    mvn spring-boot:run -Ddebug 或者 在IDEA的Application的Program arguments中加参数-Ddebug
    日志中会出现Positive matches和Negative matches
    Postive matches就是我们用到的配置

    两种方式进行配置
    > 移除@SpringBootApplication使用@Configuration,@Import,@CompomentScan自定义配置
    > 使用@SpringBootApplication中exclude中排除Negative matches中的配置

    起步依赖

    向项目中添加依赖是件富有挑战的事,SpringBoot通过起步依赖为项目的依赖管理提供帮助,起步依赖引入的库都经过测试,不会出现不兼容的情况。

    应用日志和sprig-boot-starter-logging
    默认使用logback,遵循logback约定,可以通过logback.xml配置。

    快速Web应用开发与srping-boot-starter-web
    嵌入式Web容器层面的约定和定制。
    server.为前缀的配置用于对嵌入式Web容器提供配置,比如:server.tomcat可以对嵌入式容器进行定制。

    为我们自动配置一些SpringMVC必要组件:
    - 必要的Converter,GenericConverter和Formatter
    -一系列HttpMessageConverter一边对Web请求和相应类型转换

    数据访问与spring-boot-starter-jdbc
    多个数据库的处理方式:排除DataSource自动配置:
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})

    面向切面spring-boot-starter-aop
    - AopAutoConfiguration提供@Confuguration配置类和相应的配置项
    - 针对spring-aop, aspectjrt和aspectjweaver的依赖
    spring.aop.auto = false //关闭自动aop配置
    spring.aop.proxy-target-calss = false // true基于类的代理起作用,需要bglib库, false基于接口的代理,基于标准jdk,默认值。

    应用安全spring-boot-starter-security
    默认提供基于HTTP Basic认证的安全防护策略;
    提供针对XSS, CSRF等常见针对Web应用的攻击防护;
    提供基本认证和授权,加密解密,统一登陆等。

    应用监控

    Spring Boot提供了运行时检视应用程序内部情况的能力,包括应用Bean,自动配置,环境变量,内存用量,垃圾回收,Web请求。可以结合prometheus来可视化监控和报警。

    - 查看配置明细
    显示有哪些Bean,Bean的依赖关系,Bean的装配

    查看运行时度量
    应用程序的内存情况,垃圾回收收集次数,http度量

    自定义度量
    根据需要我们可以自定义一些度量值


    SpringBoot入门系列

    基础篇-Java相关的有些事
    基础篇-SpringBoot那些事
    基础篇-Spring必须知道的
    基础篇-工欲善其事


    摘自
    *Spring Boot实战
    *Spring Boot解密
    **需要PDF书籍的可以私聊

    相关文章

      网友评论

          本文标题:基础篇-SpringBoot那些事

          本文链接:https://www.haomeiwen.com/subject/geyjsrtx.html