学习 SpringBoot 需要做哪些准备?
- IDE:IDEA
- 基础工具:JDK1.8、Maven
SpringBoot 背景介绍
什么是 SpringBoot? Spring Boot是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度,简省繁重的配置.
Spring Boot提供了各种组件的启动器(starter),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目.
Spring Boot不但能创建传统的 war 包应用,还能创建独立的不依赖于任何外部容器(如:tomcat)的独立应用,使用java -jar 命令就能启动.
SpringBoot 的设计目标
- 为 Spring 应用开发提供一个更快、更容易上手的入门体验
- 提供一系列在经常用到的公共的非功能性特性,如:内嵌入服务器、安全、度量指标、健康检测、外部化配置
- 零代码配置生成及零 XML 配置
SpringBoot 包含哪些特性
首先,需要知道,SpringBoot 工程(应用)与普通的 Java/Spring 应用没有任何区别,或不一样的实现形式。简单的说,你只要在 pom 文件中加上了 SpringBoot 所必须的 parent 和相关依赖,这就是一个 SpringBoot 应用。
当你理解了 Spring,学习 SpringBoot,是一件很简单的事,因为它只是简化了对 Spring 的使用与配置。除此之外,它也提供了一些功能强大且方便的特性。这里,我介绍一些最为常用的特性。
应用启动入口
注解 @SpringBootApplication
三种启动方式
- SpringApplication 的静态方法 run
- 通过 SpringApplication 的 Api调整应用行为
- SpringApplicationBuilder 的 Fluent Api,可以实现链式调用
自动配置的原理
简单的说,自动配置就是会根据在类路径中的jar、类自动配置Bean。Spring Boot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目里面引入这些starter,相关场景的所有依赖都会导入进来。
自动配置的实现是基于三个重要的注解实现的(实际就是 @SpringBootApplication 注解):
- @SpringBootConfiguration 类似于 @Configuration
- @EnableAutoConfiguration 开启自动配置的功能
- @ComponentScan 扫描注解,扫描 classpath 下的定义的 bean,即 将@Controller、@Service、@Component、@Repository等注解加载到IOC容器中
配置文件优先级
同一个目录下的 application 和 bootstrap
- bootstrap 优先级高于 application,优先被加载
- bootstrap 用于应用程序上下文的引导阶段,由父 ApplicationContext 加载
- bootstrap 是系统级别的配置(不变的参数),application 是应用级别的配置 不同位置的配置文件加载顺序(优先级)
file:./config/ - 优先级最高(项目根路径下的 config) file:./- 优先级第二(项目根路径下) classpath:/config/ - 优先级第三(项目 resources/config 下) classpath:/ - 优先级第四(项目 resources 目录下) 高优先级覆盖低优先级相同配置、多个配置文件互补
配置注入的方式
- 直接使用 @Value
- 使用 @ConfigurationProperties prefix 的方式
Jackson 的使用技巧
通常在项目中处理JSON一般用的都是阿里巴巴的fastjson, 后来发现使用Spring Boot内置的Jackson来完成JSON的序列化和反序列化操作也是非常方便的。
- @JsonProperty,作用在属性上,用来为JSON Key指定一个别名
- @Jsonlgnore,作用在属性上,用来忽略此属性
- @JsonIgnoreProperties,忽略一组属性,作用于类上
- @JsonFormat,用于日期格式化
Jackson通过使用ObjectMapper的writeValueAsString方法将Java对象序列化为JSON格式字符串 反序列化使用 ObjectMapper 的 readValue
定时任务
在 SpringBoot 中开启定时任务需要做两件事:
- @EnableScheduling:允许当前的应用开启定时任务
- @Scheduled:指定定时任务的运行规则
异步任务
通常代码都是顺序执行(一行一行的执行),这也就是同步调用。但是异步编程却没有这样的限制,代码执行并不是阻塞的。可以直接调用不用等待返回,而是在某一个想要获取结果的时间点再去获取结果。在 SpringBoot 应用中编写异步代码:
引入spring-boot-starter-web依赖
- 在SpringBoot入口类上加上 @EnableAsync 注解,开启异步支持
- 只需要在方法上加上 @Async 注解,则当前方法就是异步方法
- 默认情况下的异步线程池配置使得线程不能被重用,每次调用异步方法都会新建一个线程,我们可以自己定义异步线程池来优化。
单元测试
编写单元测试可以帮助开发人员编写高质量的代码,提升代码质量,减少Bug,便于重构。SpringBoot提供了一些实用程序和注解,用来帮助我们测试应用程序,在SpringBoot中开启单元测试只需引入spring-boot-starter-test即可,其包含了一些主流的测试库。
一个标准的SpringBoot测试用例应该包含两个注解:
- @SpringBootTest:意思是带有 SpringBoot 支持的引导程序,其中提供了可以指定 Web 环境的参数
- @RunWith(SpringRunner.class):告诉JUnit运行使用Spring的测试支持。SpringRunner是SpringJUnit4ClassRunner的新名字,这个名字只是让名字看起来简单些