基础篇-SpringBoot那些事

<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书籍的可以私聊

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容