《spring boot实战》读书笔记
《spring boot实战》 【美】Craig Walls 著;丁雪丰 译
一、入门
spring boot四个核心:
自动配置:针对spring应用程序常见的些应用功能,spring boot能够自动提供相关配置;
起步依赖:利用了传递依赖解析,把常用的库聚合在一起,组成了几个为特定功能而定制的依赖。(**-starter)
命令行界面:去除代码噪音(import, getter,setter等)
Actuator:提供在运行时检视应用程序内部情况的能力;
二、spring boot应用程序
@SpringBootApplication注解将三个有用的注解组合在一起:
@Configuration, @ComponentScan, @EnableAutoConfiguration
三、自定义配置
两种影响自动配置的方式:使用显示配置进行覆盖和使用属性进行精细化配置;
显示配置:想要覆盖spring boot的自动配置,你所要做的仅仅是编写一个显示的配置。Spring boot会发现你的配置,随后降低自动配置的优先级,以你的配置为准。
Spring boot的设计师加载应用级配置,随后再考虑自动配置类。 自动配置类上有可能加@ConditionalOnMissingBean注解, 比如jdbcTemplate, 要求当前不存在JdbcOperations bean时才生效,如果应用级配置已经有了jdbcTempalte了,那么就不再执行了。
通过属性文件外置配置:spring boot能从多种属性源获取属性, 优先级顺序依次为:
1)命令行参数
2)java:comp/env里的JNDI属性
3)JVM系统属性
4)操作系统环境变量
5)随机生成的带random.*前缀的属性(在设置其他属性时可以引用它们,比如${random.long})
6)应用程序以外的application.properties等文件
7)打包在应用程序的application.properties等文件
8)通过@PropertySource标注的属性源
9)默认属性
高优先级属性源里设置的属性会覆盖低优先级的相同属性;
默认情况下,日志文件的大小达到10mb时会切分一次;
spring boot自动配置的默认错误处理器会查找名为error的视图,如果找不到就用默认的白标视图;
四、测试
@SpringApplicationConfiguration
测试http请求:Spring Mock MVC: MockMvcBuilders
@WebIntegrationTest
使用Selenium测试Html页面;
五、Grovy与Spring Boot CLI
通过Groovy消除代码噪声, 不需要public,private等限定符; 行尾分号; getter、setter等;
@Grab注解会告诉Groovy在启动应用程序时自动获取一些依赖的库;
Spring Boot CLI的技能:
cli可以利用spring boot的自动配置和起步依赖;
cli可以检测使用的类,自动解析合适的依赖库来支持那些类;
cli知道多数常用类在哪些包里,如果用到了这些类,它会把这些包加入Groovy的默认包里;
cli如果检测到当前运行的是个web程序,会自动引入嵌入式web容器(默认tomcat)供程序使用;
覆盖默认依赖版本:@GrabMetadata
添加依赖仓库:默认情况下,@Grab声明的依赖是从Maven中心仓库拉取的。此外,Spring Boot还注册了spring的里程碑及快照仓库,以便获取spring项目的预发布版本依赖。
@GrabResolver注解:指定额外的仓库。
六、在Spring Boot中使用Grails
GORM: @Entity注解让实体类变成GORM, GORM的工作原理要求实体类必须用Groovy来编写;可直接通过实体类进行持久化操作; ·
GSP: Groovy SServer Pages 将模型数据以html的形式呈现给浏览器; 必须要放一个隐藏域,其中包含CSRF令牌,spring boot security在提交post请求时要求带这个令牌,htymeleaf在呈现html时会自动包含这个令牌,但是GSP里必须在隐藏域显示的包含它;
创建新的grails项目:grails create-app **
运行应用程序:grails run-app **
七、深入Actuator
spring-boot-starter-actuator
端点可以分为三大类:配置端点、度量端点和其他端点;
配置端点:
/beans 获得bean装配报告:bean, resource, dependencies, scope, type;
/autoconfig 详解自动配置:positiveMatches, condition, message, negativeMatches;
/env 查看配置属性:/env会生成应用程序可用的所有环境属性的列表,无论这些属性是否用到。带有password、secret、key的属性会加上**
运行时度量:
/metrics :垃圾收集计数、内存使用和空闲数量、堆、类加载器、系统(处理器数量、运行时间、平均负载)、线程池、数据源、tomcat回话、http计数;
/trace 追踪web请求: timestamp, method, path,
/dump 生成当前线程活动的快照;
/health 监控应用程序健康情况:diskspace, db, redis, rebbit
其他:
/shutdown 关闭应用程序, 这个端点默认是不启用的, 可以endpoints.shutdown.enabled=true将其打开;
/info 获取应用信息;
连接actuator的远程shell: spring-boot-starter-remote-shell, 用户名、密码、端口号;
通过JMX监控应用程序;
定制Actuator:
重命名端点: endpoints.endpointId.id=**
启用或禁用端点:endpoints.endPointId.enabled=true/false
禁用全部端点:endpoints.enabled=false;
如果想只打开一两个端点, 就可以使用禁用全部,再启用想要的那一两个;
添加自定义度量信息:CountService计数器接口;GaugeService 添加度量值;
创建自定义跟踪仓库:/trace端点报告的跟踪信息都存储在内存仓库里,默认100个条目; InMemoryTraceRepository Bean调整trace条目等信息;
插入自定义健康指示器:HealthIndicator接口
保护Actuator端点:SecurityConfig
网友评论