题目
SpringBoot 常用的 starter 有哪些
答案
@[toc]
---
## spring-boot-starter
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.6.2</version>
<scope>compile</scope>
</dependency>
```
这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
一般不会直接使用,大部分 spring-boot-starter-[name] 会自动依赖引入的。
## spring-boot-starter-web
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
支持全栈式Web开发,包括Tomcat和spring-webmvc。
## spring-boot-starter-aop
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
```
支持面向方面的编程即AOP,包括spring-aop和AspectJ。
## spring-boot-starter-test
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
```
支持常规的测试依赖,包括 JUnit、Hamcrest、Mockito 以及 spring-test 模块。
## spring-boot-starter-logging
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
```
引入了 Spring Boot 默认的日志框架 Logback
## spring-boot-starter-log4j
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
```
支持 Log4J 日志框架。
## spring-boot-starter-jdbc
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```
支持 JDBC 数据库。
## spring-boot-starter-data-redis
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
支持 Redis 键值存储数据库,包括 spring-redis。
## spring-boot-starter-cache
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
```
支持Spring的 Cache 抽象
## spring-boot-starter-data-elasticsearch
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
```
支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。
## spring-boot-starter-data-jpa
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
```
持JPA(Java Persistence API,包括spring-data-jpa、spring-orm、Hibernate。
## spring-boot-starter-data-mongodb
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
```
支持MongoDB数据,包括spring-data-mongodb。
## spring-boot-starter-security
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
支持spring-security。
## 特殊的 starter:spring-boot-starter-parent
spring-boot-starter-parent 只用来作为其他 maven 项目的 parent,因此它除了 pom 文件并没有什么有效的内容,要理解 spring-boot-starter-parent,还得看它的 pom 文件定义。由于 pom 文件内容过长,下面我们分别进行介绍它主要引入的功能。
1. **依赖版本管理**
`spring-boot-starter-parent` 自身并没有定义 `dependencyManagement`,依赖管理依托于它的 parent `spring-boot-dependencies`:

`spring-boot-dependencies` 内部定义了很多依赖,这样我们就不用关心依赖的版本了:
> 可以点进 `spring-boot-dependencies` 中查看定义了哪些依赖的版本,如果有的话后续导入依赖的时候就不需要再指定 `version` 了

示例代码如下。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<version>2.2.7.RELEASE</version>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
</parent>
<groupId>com.veal</groupId>
<artifactId>project-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
// 此处不需要指定 version,已在 spring-boot-dependencies 中指定
</dependency>
</dependencies>
</project>
```
2. **属性配置**
`spring-boot-starter-parent` 添加了一些默认的配置,如指定了使用的 JDK 版本号为 1.8,编译时使用 UTF-8 编码方式

3. **资源过滤**
`spring-boot-starter-parent` 指定了编译资源文件时将 `**/application*.properties`、`**/application*.yml` 和 `**/application*.yaml` 中的 maven 占位符替换为具体的属性值

> 如果没有引入 `spring-boot-starter-parent`,需要在 `application.properties` 文件中使用 `maven` 占位符时切记要手动配置 `resource`。
4. **插件配置**
spring-boot-starter-parent 内置了不少插件配置,比如 maven-compiler-plugin 和 spring-boot-maven-plugin
## mybatis-spring-boot-starter
```xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
```
支持 MyBatis。
> 由于不是SpringBoot团队开发的,所以命名风格略有不同
## pagehelper-spring-boot-starter
```xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
```
支持 MyBatis PageHelper 分页
