《Spring Boot实战》读书笔记

一、 读后感

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 {
	@Test
	public void contextLoads() {
	}
}

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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值