# 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的處理器。