2019独角兽企业重金招聘Python工程师标准>>>

一、 读后感

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的插件

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

3. 写代码

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ControllerDemo {@RequestMapping("/")public String index(){return "hello springboot";}
}package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public 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")

四、端点度量

访问地址:http://localhost:8080/actuator/health

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)
@WebAppConfiguration
public class ReadlistApplicationTests {@Testpublic void contextLoads() {}
}

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

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

《Spring Boot实战》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. docker清空为none的镜像
  2. Nginx源码分析:3张图看懂启动及进程工作原理
  3. STM32串口+DMA使用1
  4. 高通、猎户机型Android典型bootloader分析
  5. [深度学习] DeepFM 介绍与Pytorch代码解释
  6. 隐马尔科夫模型C#类库调用示例
  7. linux块设备驱动中断程序,linux设备驱动归纳总结(六):1.中断的实现
  8. 一位女生写的追MM秘计
  9. 接口规范 10. 并发限制相关接口
  10. Java 学习经验[转]
  11. 企业为什么需要IT服务台(二)
  12. Python笔记3:使用命令行运行Python文件
  13. linux驱动编译成kext,Hackintosh:制作AppleALC以驱动原生AppleHDA
  14. at android.widget.Toast$TN.handleShow(Toast.java:501)自定义布局异常
  15. 计算机提示应用程序无法启动,电脑应用程序无法正常启动提示0x000007b怎么办?...
  16. chrome主页和新标签页被金山毒霸劫持 处理方法
  17. 360无线wifi 无法连接服务器,360wifi连接上但上不了网的解决方法
  18. 华为大数据生态适配地图
  19. 论文阅读:Tackling the Challenges in Scene Graph Generation with Local-to-Glocal Interaction
  20. 命令式和声明式,哪个才是你的菜

热门文章

  1. PL/SQL Developer 登录 Oracle 12c和Win10下安装Oracle 11g
  2. linux -- ubuntu桌面版安装xampp
  3. 公钥、私钥、数字证书的概念 (讲得很明吧,通俗易懂)
  4. TSqlConnection
  5. JQGrid 在页面加载时展开SubGrid
  6. algorithm与numeric的一些常用函数
  7. lighttpd 之防盗链
  8. PostgreSQL MySQL 兼容性之 - Gis类型
  9. 利用SCCM2012中的导入计算机功能来实现定制化的操作系统部署
  10. topic1:Qt入门之搭建环境与hello world看Qt开发框架