基础篇-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那些事)