读书笔记:Spring boot实战

第一章 入门

Spring boot最重要的四个核心 :

1.自动配置:针对很多spring应用程序常见的应用功能,spring boot能自动提供相关配置

2.起步依赖:告诉spring boot需要什么功能,它就能引入需要的库

3.命令行界面:这是spring boot的可靠特性,借此你只需写能完成完整的应用程序,无需要传统项目的构建。

4.Acuator:让你能够深入运行中的spring boot应用程序,一探究竟。

第二章 开发第一个应用程序

一个最快的搭建项目的方法,从技术角度看,用spring mvc来处理web请求,用thymeleaf来定义web视图,用spring data jpa来把持久化到数据库里,数据库可以用嵌入式的h2数据库。

@springbootApplication开启了spring的组件扫描和spring boot的自动配置功能。实际上它将三个有用的注解组合在了一起:

1)@Configuration:标明该类使用spring基于java的配置。

2)@ComponentScan:启用组件扫描,这样你写的web控制器类和其他组件才能被自动发现并注册为spring应用程序上下文里的bean.

3)  @EnableAutoConfiguration:就是这一行开启了spring boot自动配置的魔力,让你不用再写成篇的配置了。

构建插件maven或gradle的主要功能就是把项目打包成一个可执行的超级jar,包括把应用程序的所有依赖打入jar文件内,并为jar添加一个描述文件,其中的内容能让你用java -jar来运行程序。

使用maven时将spring-boot-starter-parent作为上一级,这样一来就能利用maven的依赖管理功能,继承很多常用 库的依赖版本,在你声明依赖时就不用再云指定版本号了。gradle没有这样的功能

在maven里可以用<exclusions>元素来排除传递依赖。

在向应用程序加入spring boot时,有个名为spring-boot-autoconfigure的jar文件,其中包含了很多配置类。每个配置类都在应用程序的classpath里,都有机会为应用程序的配置添砖加瓦。所有这些配置与从不同原因在于它们利用了spring的条件化配置。这是spring4.0引入的新特性。条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。

第三章 自定义配置

覆盖自动配置很简单,就当自动配置不存在,直接显式地写一段配置。

spring boot的设计 是加载应用级配置,随后再考虑自动配置类。因此,如果你已经配置了一个jdbctemplate bean,那么在执行自动 配置时就已经存在一个jdbctemplate类型的bean了,于是忽略自动配置的jdbctemplate bean。

为了微调一些细节,比如改改端口号和日志级别,可以配置个一个属性就可以,可以在命令行参数里指定,要以是配置文件application.properties中,可以通过环境变量修改。

这里要注意,如果采用环境变量的话,不是使用-,要使用_,这是对环境变量名称的要求。

可以使用Bean里通过@ConfigurationProperties注解加载配置文件的属性配置。

当应用程序部署到不同的运行环境中,一些配置细节通常会有不同,spring从3.1开始支持基于profile的配置,profile是一种条件化配置,基于运行时激活的profile,会使用或忽略不同的bean或配置类。可以以下几种形式的profile文件:

1. application-{profile}.properties. 2,在一个yml文件中使用---分隔profile配置

定制应用程序错误页面:如果配置了thymeleaf,则有名为error.html的thymeleaf模板。

第四章 测试

 spring在进行集成测试时,遵照生产环境来组装测试目标bean是非常重要的,它提供了额外的辅助功能,比如组件扫描,自动植入和声明性切面(缓存,事务,安全)。你要把这些活都干了,基本也就是把spring再造了一次。 spring从1.1.1就向集成测试提供了极佳的支持,从2.5开始,集成测试支持的形式就变成了springjunit4classrunner,这是一个junit类运行器,会为junit测试加载spring应用程序上下文,并为测试类自动植入所需的bean.

测试web应用程序有2个可选方案:

1.spring mock mvc: 能在一近似真实的模拟servlet容器里测试控制器,而不用实际启动应用服务器。

2 web集成测试。在嵌入式servlet容器里启动应用程序,在真正的应用服务器里执行测试。

让Spring Boot在随机选择的端口上启动服务器很方便。一种办法是将 server.port属性设置为0,让Spring Boot选择一个随机的可用端口

第五章 groovy与spring boot cli

第六章 在spring boot中使用grails

第七章 深入actuator

Spring Boot的Actuator提供了很多生产特性,比如监控和度量应用程序。这些特性可以通过REST端点、远程shell和JMX获得。
Spring Actuator提供了13个REST端点:/autoconfig,/configprops,/beans,/dump,/env,/env/{name} ,/health,/info,/mappings,/metrics,/metrics/{name},/shutdown,/trace:

ID 路径 请求方式 说明
1 /autoconfig GET 自动配置报告,记录哪些自动配置条件是否通过
2 /configprops GET 描述配置属性(包括默认值)如何注入的
3 /beans GET 描述上下文所有bean,以及它们之间的关系
4 /dump GET 获取线程活动快照
5 /env GET 获取全部环境属性
6 /env/{name} GET 获取特点环境属性
7 /health GET 应用程序健康指标,由HealthIndicator的实现类提供
8 /info GET 获取应用程序定制信息,这些信息有info打头的属性提供
9 /mappings GET 描述全部URL路径,及它们和控制器(包括Actuator端点)的映射关系
10 /metrics GET 报告各种应用程序度量信息,比如内存用量和http请求计算
11 /metrics/{name} GET 报告指定名称的应用程序度量值
12 /shutdown GET 关闭应用程序,要求endpoints.shutdown.enabled设值为true
13 /trace GET 提供基本的HTTP请求跟踪信息,时间戳,HTTP头等
要启用Actuator的端点,只需在项目中引入Actuator的起步依赖即可

应用程序度量报告
/metrics端点为我们提供了应用程序运行时的一些情况,比如内存、线程、类加载数量等等的计数和度量情况

报告片段

{
"mem": 379698,//系统分配的内存(k)
"mem.free": 204406,//空闲内存(k)
"processors": 8,//处理器数量
"instance.uptime": 95093826,//实例运行时间(ms)
"uptime": 95110093,//正常运行时间(ms)
"systemload.average": -1,//平均负载
"heap.committed": 316416,
"heap.init": 131072,
"heap.used": 112009,
"heap": 1837056,//堆内存(k)
"nonheap.committed": 64592,
"nonheap.init": 2496,
"nonheap.used": 63283,
"nonheap": 0,//非堆内存(k)
"threads.peak": 60,//线程峰值
"threads.daemon": 40,//精灵线程
"threads.totalStarted": 94,
"threads": 44,
"classes": 8524,
"classes.loaded": 8524,//类加载器加载数量
"classes.unloaded": 0,
"gc.ps_scavenge.count": 11,//垃圾收集次数
"gc.ps_scavenge.time": 105,//垃圾收集总时间ms
"gc.ps_marksweep.count": 2,//标记垃圾收集器次数
"gc.ps_marksweep.time": 150,//标记垃圾收集齐所花事件
"httpsessions.max": -1,
"httpsessions.active": 1,
"datasource.primary.active": 0,
"datasource.primary.usage": 0,
"gauge.response.sign_in": 11,
"gauge.response.root": 179,
"gauge.response.star-star": 3,
"counter.status.200.root": 11,
"counter.status.200.star-star": 33,//返回状态为200的请求数
"counter.status.404.star-star": 12,
"counter.status.200.sign_in": 1//sign_in端点请求,状态为200的次数
......
可以将报告提供的信息分为以下几类

ID 分类 前缀 报告内容
1 垃圾收集器 gc.* 详见报告注释
2 内存 mem.* 详见报告注释
3 堆 heap.* 堆内存使用情况
4 类加载器 classes.* JVM类的加载与卸载的数量
5 系统 processors,uptime,
instance.uptime,
systemload.average 系统信息,堆内存使用情况
6 线程池 threads.* 线程、守护线程的数量,以及线程数最大峰值
7 数据源 datasource.* 数据源链接的数量,仅Spring上下文里存在DataSource Bean的时候才会有该信息
8 Tomcat会话 httpsessions.* tomcat活跃会话数和最大会话数,该度量指标信息仅在引入了嵌入式Tomcat作为应用容器的时候才会提供。
9 HTTP counter.status.,
gauge.response. 服务HTTP请求的度量值域计数器
如果只想知道某一个属性信息的情况,可以直接指定属性/metrics/{name}(name为指定的属性名)。
如想知道垃圾收集次数,那么可以如下方式访问
http://127.0.0.1:54001/manager/metrics/gc.ps_scavenge.count,则只会返回指定属性的结果。

虽然Actuator提供了很多运行中Spring Boot应用程序的内部工作细节,但难免和你的需求有 所偏差。也许你并不需要它提供的所有功能,想要关闭一些也说不定。或者,你需要对Actuator 稍作扩展,增加一些自定义的度量信息,以满足你对应用程序的需求。 实际上,Actuator有多种定制方式,包括以下五项。

 重命名端点。  启用和禁用端点。  自定义度量信息。  创建自定义仓库来存储跟踪数据。  插入自定义的健康指示器。 

第8章 部署spring boot应用程序

可以通过修改程序,将spring boot生成的jar包 改成war包,这样就即可以把这个War包放在tomcat里执行,也可以java -jar **.war。

Spring Boot应用程序的构建说明经常会配置为生成可执行的JAR文件。我们也看到了如何对 构建进行微调,如何编写一个SpringBootServletInitializer实现,生成WAR文件,以便 部署到应用服务器上。 随后,我们进一步了解了如何将应用程序部署到Cloud Foundry上。Cloud Foundry非常灵活, 能够接受各种形式的Spring Boot应用程序,包括可执行JAR文件、传统WAR文件,甚至还包括原 始的Spring Boot CLI Groovy脚本。我们还了解了Cloud Foundry如何自动将内嵌式数据源替换为绑 定到应用程序上的数据库服务。 

猜你喜欢

转载自www.cnblogs.com/hankuikui/p/10406112.html