博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Spring Boot实战》读书笔记
阅读量:5974 次
发布时间:2019-06-19

本文共 3761 字,大约阅读时间需要 12 分钟。

hot3.png

一、 读后感

Spring Boot在技术圈火了好多年了,直到最近才去系统学习它,真是相见恨晚。当我在IDE编写几行代码就把WEB应用启动,页面访访问出来hello world的时候,我惊讶的感叹Spring构建WEB应用竟如此简单。

Spring Boot起源于2014年,是为简化Spring项目中复杂难记的配置而生。回顾Spring开发历程,我们定义bean以及依赖关系大概经历这样两个阶段:

  1. 在配置文件中定义。
  2. 使用注解定义。

虽然使用注解后我们写配置文件的工作量减少了很多,但是还是得在配置文件中编写一系列jar依赖,当实现一个功能时可能要引入多个依赖,而这些依赖关系我们难以记得住,更难以搞得清楚。我觉得以前的Spring开发还有两个比较明显的痛点:

  1. 配置文件中的jar依赖较多,且依赖关系复杂。
  2. 属性配置值不规范,不方便读取配置值。

Spring Boot最基本作用就是解决以上痛点,但是其集成的功能远超过这些。Convention over configuration(约定优于配置)一句话可以简单概述Spring Boot的基本功能,其起步依赖、自动配置已经约定的属性值可以把以上两个痛点处理得相当棒。

另外,Spring Boot自带的端点度量功能可以让我们更了解应用的运行状况。其提供的快速测试和部署方法提高了我们的工作效率。

不得不承认,国外大牛写的这本书确实容易理解,是一本很好的入门书籍,接下来是我对本书的一些技术总结。

二、启动第一个Spring Boot项目

只要三步就可以构建一个Spring Web应用

1. 使用Spring Initializr初始化Spring Boot项目

这一步创建Spring Boot脚手架,方式有好几种,包括:通过Spring 官网Web界面创建、Spring Tool Suite创建、IDEA等。我就直接使用IDEA创建,效果如下:

这里java、和test目录定义跟以前一样。resources下面放应用的资源,static放页面静态文件,比如css,html文件。templates下面放模板文件,比如Velocity,Thymeleaf等。application.properties默认属性文件,只要放里面写key value对,应用就可以读取到。

2.生成依赖文件,可以用gradle,maven,我是用maven。只要加入一个web的依赖,一个maven的插件

org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-maven-plugin

3. 写代码

import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class ControllerDemo {    @RequestMapping("/")    public String index(){        return "hello springboot";    }}package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ReadlistApplication {	public static void main(String[] args) {		SpringApplication.run(ReadlistApplication.class, args);	}}

然后在IDEA启动应用,一个web应用就起来了。默认插件服务器是tomcat,端口是8080.从中我们可以看到依赖是多么的简洁,只要一个约定好的起步依赖就好了。

其中启动引导注解:@SpringBootApplication,其包含三部分

  1. @Configuration。作用是告诉spring用基于java的配置,即java config
  2. @ComponentScan。开启组件扫描
  3. @EnableAutoConfiguration。开启自动配置,自动配置bean依赖的jar(自动配置是通过@Conditional 去关联的,条件满足就注入相关的依赖,步步关联jar)

三、配置的设置方式

  1. 命令行参数
  2. java:comp/env里的JNDI属性配置文件
  3. JVM系统属性
  4. 操作系统环境变量
  5. random.*前缀属性
  6. 应用程序以外的 application.properties,.application.yml文件
  7. 打包在应用程序内的 application.properties,.application.yml文件
  8. 通过PropertySource标注的属性源
  9. 默认属性

优先级从高到低,1优先级最高,高优先级的可以覆盖低优先级的属性值。

另外 两个默认加载的两个文件(application.properties,.application.yml)能放在以下四个位置,优先级从高到低

  1. 外置,在相对于应用程序运行目录的 /config 目录下
  2. 外置,在应用程序运行目录下
  3. 内置,classpath的/config目录下
  4. 内置,classpath目录下

其它名称的属性文件,比如xx.properties文件,也可以放到以上四个位置加载,优先级一样,但是需要用到@PropertySource("xx")加载,比如@PropertySource("classpath:aa.properties"),这个注解不能加载yml文件

xml文件需要使用@ImportResource加载

同一优先级同时有application.properties,.application.yml,那么application.yml的优先级更高

有两种方式引用属性值: @ConfigurationProperties("prefix")和@Value("key")

四、端点度量

访问地址:

spring boot 2.x 以上默认只加载了 info / health 其他端点需要在配置文件中开启: management.endpoints.web.exposure.include=*

各端点功能如下: beans:看到依赖 conditions:自动配置报告,依赖的匹配条件 env:查看属性值,password、secret、key的值会*号屏蔽显示。后面加属性key可以查看单个属性值,例如env/server.port mapping:查看映射 metrics:度量信息。运行时数据 trace:跟踪web请求,查看请求头信息 dump:线程活动 health:服务的健康状态,健康指示器

shutdown:关闭运行中的应用程序,默认关闭 management.endpoint.shutdown.enabled=ture开启

除了REST获取端点信息,端点可以用shell,MBean查看端点信息

可以定制actuator,返回需要的健康信息, 也可以改变端点的id,启用或者禁用端点 management.context-path=/actuator 设置端点的根目录,2.x以上似乎已经加上了/actuator

五、单元测试

@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = ReadlistApplication.class)@WebAppConfigurationpublic class ReadlistApplicationTests {	@Test	public void contextLoads() {	}}

@RunWith(SpringJUnit4ClassRunner.class):引入Spring对JUnit4的支持。 @SpringBootTest(classes = ReadlistApplication.class):加载应用程序上下文。 @WebAppConfiguration:开启WEB应用的配置,用于模拟ServletContext。

转载于:https://my.oschina.net/chenzanjin/blog/3057548

你可能感兴趣的文章
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
HBase 笔记3
查看>>