# Spring Boot简介及入门
## 什么是Spring Boot
### (一)当前Java开发遇到的问题
* 繁多的配置
* 低下开发的效率
* 复杂的部署流程
* 第三方技术集成难度大
### (二)Spring Boot的诞生
#### Spring Boot的目的
Spring Boot是在Spring框架基础上创建的全新框架。相比于以往的一些开发框架,Spring Boot使用更加简单,而且功能更加丰富,性能更加稳定而健壮。Spring Boot的设计目的就是简化开发,让开发者能把更多的精力投入到实际业务中。
#### Spring Boot核心理念
Convention Over Configuration (约定优于配置)
#### Spring Boot特点
- 开箱即用,根据项目依赖自动配置。
- 功能强大的服务体系,如:嵌入式服务、安全、性能指标、健康检查
- 绝无代码生成,可以不需要任何xml配置(使用Java配置和注解来代替)
- 对第三方技术几乎完美整合
### (三)Spring Boot快速上手
#### Spring Boot非命令行构件的三种方式
1. IntelliJ IDEA自带构件Spring Boot
2. Eclipse 安装STS插件
1. 可以在官方下载安装,官方地址[:https://spring.io/tools/sts/all](http://note.youdao.com/)
2. 可以在Eclipse的MarketPlace中安装:
3. 使用官方自带的生成工具:
1. 进入官网,在DOCS栏目中点击如下:

2. 选择项目构件工具和Spring Boot的版本

3. 展开扩展选项,进行更详细配置,这里我们用到SpringMVC,只需要勾选一个`WEB`即可

4. 点击按钮  生成项目。
5. 解压项目后,是一个标准的Maven工程,导入到IDE中即可。
#### Spring Boot项目结构简介
**项目结构如图**:

- `SpringbootdemoApplication.java`:Spring Boot的启动入口,以及一些全局的配置。注解`@SpringBootApplication`表明了这是Spring Boot的应用入口,Spring官方建议该入口有且只有一个。
- static目录:Spring Boot**约定**的静态文件目录,只要放在这个目录中,Spring Boot就会当成静态文件处理。
- templates:Spring Boot**约定**的模板目录,如FreeMarker、Thymeleaf(默认)、Jsp(不建议)等
- `application.properties`:Spring Boot的配置文件,可以是`.properties`或者`.yml`(spring推荐)
- pom.xml文件:Maven的构建配置文件。其中`spring-boot-starter-parent`是Spring Boot构建的基础,负责依赖管理与默认配置,`spring-boot-starter-web`是SpringMVC的依赖,`spring-boot-starter-test`是测试依赖,`spring-boot-maven-plugin`是Spring Boot的打包插件。通过简单的依赖配置,Spring Boot将自动帮我们导入其他所需要的依赖包。
#### 一次请求响应
1. 在com.luyou下创建一个`domain`包,一个`controller`包,domain包里创建一个`User`类,controller包里创建一个`TestController`类,如下:
User:
```java
public class User implements Serializable{
private long id;
private String name;
@JsonFormat(pattern="yyyy年MM月dd日")
private Date birthDay;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date registerDate;
get/set ...
}
```
TestController:
```
@RestController
@RequestMapping(value = "/test")
public class TestController {
@GetMapping("/getmap")
public Map<Long,Object> getMap(){
Map<Long,Object> map = new HashMap<>();
User user = new User();
Date date = new Date();
user.setBirthDay(date);
user.setRegisterDate(date);
user.setId((long)(Math.random()*50000));
user.setName("张三丰");
map.put(user.getId(),user);
return map;
}
}
```
2. 到SpringbootdemoApplication中运行main方法,会在控制台看到Spring Boot的启动画面,在启动日志中,会发现
- Tomcat started on port(s): 8080 (http)
- Started SpringbootdemoApplication in 5.938 seconds (JVM running for 6.524)
这样的输出,表示应用已经启动好了。
3. 通过浏览器或者postman访问:127.0.0.1:8080/test/getmap,会发现json已经返回。

#### 打包
1. 通过Eclipse的maven插件打包:在项目上右键-->Run as--> Maven Build,如果是第一次,会出现如下对话框:
[image](http://on3eg24oc.bkt.clouddn.com/Maven%E6%89%93%E5%8C%8501.jpg)
2. 打包成功后,在项目的`target`目录下会生成对应的jar包(若没有,请刷新一下项目),我们需要的是包含完整依赖的`springbootdemo-0.0.1-SNAPSHOT.jar`,而另外一个后缀为`.original`的包中只有我们自己的代码,没有相关的依赖包。

#### 部署
先将`springbootdemo-0.0.1-SNAPSHOT.jar`改名成`springbootdemo.jar`方便敲键盘。
现在我们换一种操作系统,比如linux,将`springbootdemo-0.0.1-SNAPSHOT.jar`上传到系统中,比如/luyou/springboot/,然后执行:
> java -jar /luyou/springboot/springbootdemo.jar
这样,项目就已经部署好了。
#### 怎样做到
Spring Boot的入门就这样完成了,一个最基本的mvc框架。
* Spring Boot 默认会扫描注解`@SpringBootApplication`所在*包*以及*子包*,如果发现包下面的类有如`@Controller`、`@Service`、`@Component`、`@Repository`...这样的注解,会注册成由spring管理的一个Bean。
* Spring Boot内嵌了Tomcat容器,默认端口8080(这个端口号,就是在没有额外配置时的**约定**)
* Spring Boot默认使用了Jackson作为json的处理器。
