亡羊補(bǔ)牢,為時(shí)不晚。人在任何時(shí)候做自己想做的事情,有這種自由,還是很值得欣慰的。
我之前做Web開發(fā)的時(shí)候,已經(jīng)是5年前了吧。
現(xiàn)在技術(shù)日新月異,我想我這把老骨頭還可以出來繼續(xù)發(fā)揮下余熱。
[TOC]
開發(fā)環(huán)境說明
- win10
- openJDK 1.8
我就不搞什么Ubantu,CentOS啥的了,部署的時(shí)候,是沒有太多區(qū)別的。
SpringBoot簡介
SpringBoot是一種利用Spring框架快速開發(fā)、部署的工具,它有如下幾個(gè)優(yōu)勢:
- 快速搭建
- 快速使用
- 提供生產(chǎn)級(jí)的服務(wù)監(jiān)控
- 快速部署(自帶服務(wù)器)
- 非功能性通用配置
- Java配置,無代碼,XML書寫等繁瑣事
就頭4條,就很吸引人了。
笨辦法創(chuàng)建一個(gè)SpringBoot
為什么說是笨辦法呢?因?yàn)橛心0寤瘎?chuàng)建的方式方法,不用這么手工去做。
但是本著后續(xù)看代碼找問題的態(tài)度,我們還是要講一下代碼的基本創(chuàng)建的。
如果你要快,那請(qǐng)直接看“模板化構(gòu)建”小節(jié)描述。
JAVA版本選擇
Oracel JDK和Open JDK兩個(gè)分支,推薦選擇Red Hat提供的openJDK版本,后續(xù)JDK的8和11都是Red Hat維護(hù),下載鏈接,推薦用8號(hào)版本。
OpenJDK的環(huán)境變量配置,是自動(dòng)添加上的,所以省事很多。
選擇IDE
我們常用的編碼工具有2個(gè):
- Eclipse
- IntelliJ IDEA(后面就叫IDEA)
兩者都是很優(yōu)秀的IDE,IDEA是后起之秀,市場占有率逐年上升,Eclipse是個(gè)老大哥,使用起來很節(jié)約資源。建議電腦沒有SSD,不是很硬的話,還是選擇Eclipse。
關(guān)于更多的IDE選擇問題,請(qǐng)諸位查看網(wǎng)上更多相關(guān)資料,筆者只是提了一些建議罷了。
在這里提供eclipse下載,筆者已經(jīng)看到有基于docker的下一代開發(fā)IDE了。當(dāng)然,還有Spring推出的all in one,下載這個(gè)很省事。
我覺得還可以使用純凈版的eclipse,用什么下什么。畢竟現(xiàn)在還在學(xué),不是說效率出奇跡的時(shí)候。
創(chuàng)建項(xiàng)目
創(chuàng)建項(xiàng)目常見的方式有三種,分別是:
- mvn命令行
- Eclipse中創(chuàng)建Maven工程
- IDEA中創(chuàng)建maven工程
核心就是maven這套體系,IDE只是包個(gè)殼,提供更多便利而已。
mvn創(chuàng)建
安裝配置好maven后,CMD命令行執(zhí)行如下命令
mvn archetype:generate ^ # ^ 為命令行連接符
-DgroupId=org.sang ^ # 組織ID
-DartifactId=chapter01 ^ # 項(xiàng)目名稱
-DarchetypeArtifactId=maven-archetype-quickstart ^ # 項(xiàng)目骨架
-DinteractiveMode=false # 是否使用交互模式
會(huì)生成對(duì)應(yīng)的目錄,導(dǎo)入到IDE即可。
目前應(yīng)該沒有多少人在用這種方式創(chuàng)建了。大多是用的IDE創(chuàng)建。
IDE創(chuàng)建
IDE創(chuàng)建項(xiàng)目這里就講Eclipse的創(chuàng)建即可
- 打開IDE
- 創(chuàng)建項(xiàng)目的時(shí)候選擇Maven Project
- 選中Use default Workspace location
- 選擇默認(rèn)項(xiàng)目骨架(Archetype)
- 填寫項(xiàng)目信息,各種項(xiàng)目參數(shù),路徑-----這里記得是選擇快照版本(snapshot)
- 完成
IDEA也是這種流程。
構(gòu)建項(xiàng)目
構(gòu)建項(xiàng)目,就是要把項(xiàng)目做成一個(gè)能跑起來的過程。分為如下三步:加載依賴、編寫啟動(dòng)類、
加載依賴
這里就是書寫maven配置,建議如下配置:
在pom.xml中配置
添加spring-boot-starter-parent作為parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
這個(gè)starter提供了maven的配置,而且還提供dependency-management,開發(fā)者根本不用關(guān)心引入包的其他依賴版本配置,方便了依賴管理,所以,引入了starter,這就是一個(gè)全自動(dòng)配置包!
填了parent的坑,子類引用就方便多了。比如我們要整一個(gè)web的starter,如下:
<dependencies>
<dependency>
<groupId>org.springframwork.boot</groupId> # 保持parent一致
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
對(duì),這又是一個(gè)starter,也是一個(gè)全自動(dòng)。
對(duì)于maven不熟悉的朋友,請(qǐng)見
編寫啟動(dòng)類
其實(shí)就是寫啟動(dòng)APP類,和C層的controller類
APP
APP類也叫啟動(dòng)類,也就是項(xiàng)目的入口類。maven的項(xiàng)目架構(gòu)上已經(jīng)創(chuàng)建了項(xiàng)目包,在工程的java目錄下創(chuàng)建一個(gè)APP類:
@EnableAutoConfiguration // 開啟自動(dòng)化配置
@ComponentScan // 開啟C層映射包掃描,讓請(qǐng)求映射到對(duì)應(yīng)的方法中去
public class App{
public static void main(String[] args){
// 聲明默認(rèn)啟動(dòng)類,args為啟動(dòng)時(shí)輸入的參數(shù)數(shù)組。
SpringApplication.run(App.class,args);
}
}
Controller
SpringMVC的控制器 HelloController,C層。
@RestController
public class HelloController{
@GetMapping("/hello") // 定義接收hello請(qǐng)求
public String hello(){
return "hello moto!";
}
}
@RestController=@Controller+@ResponseBody,這是一個(gè)組合注釋
@Controller 是一種特殊化的@Component 類。習(xí)慣于和@RequestMapping綁定來使用,后者是用來指定路由映射的。
@ResponseBody 是用來把返回對(duì)象自動(dòng)序列化成HttpResponse的。
APP與Controller的注解最優(yōu)寫法
注解的天下:
APP啟動(dòng)類,2個(gè)注解(類注解)
Controller類,2個(gè)注解(1個(gè)類注解,1個(gè)方法注解)
這是不是有點(diǎn)麻煩了?
我估計(jì)作者也是這么覺的,但是思來想去,Controller的注解不好搞,就把啟動(dòng)類的注解優(yōu)化下吧。所以APP啟動(dòng)類注解可以這么寫了:
@Spring BootApplication // 組合注解,有之前2個(gè)注解的功能(自動(dòng)化配置+映射包掃描)
public class App{
public static void main(String[] args){
SpringApplication.run(App.class,args);
}
}
至此,我們的構(gòu)建就基本完成了。接下來我們啟動(dòng)項(xiàng)目看效果。
啟動(dòng)項(xiàng)目
一般有三種啟動(dòng)方式:
- mvn命令行啟動(dòng)
- IDE直接運(yùn)行main方法(啟動(dòng)定義類)
- 打包啟動(dòng)
三種場景都有運(yùn)用的地方。
mvn命令行啟動(dòng)
需要進(jìn)入項(xiàng)目的根目錄,就是pom.xml文件的那個(gè)目錄
mvn spring-boot:run
接下來我們打開瀏覽器,在 http://localhost:8080/hello 可以看到效果。
IDE直接運(yùn)行main方法
這個(gè)就是IDE上鼠標(biāo)右鍵run即可,選擇SpringBootApp啟動(dòng)。同樣在瀏覽器上可以查看效果。
打包啟動(dòng)
通過Springboot把項(xiàng)目打成jar包運(yùn)行。我們部署的時(shí)候是非常常見的。
需要3步完成
-
添加plugin到pom.xml文件中
<build> <plugins> <plugin> <groupId>org.springframework,boot</groupId> # 保持parent一致 <artifactId>spring-boot-maven-plugin</artifactId> # 添加mavne打包插件 </plugin> </plugins> </build>
這里是不是同樣需要rebuild進(jìn)行生效,若Eclipse選中的autoBuild,則是改后自動(dòng)生效,個(gè)人推薦手動(dòng)。
-
運(yùn)行mvn命令打包
這里應(yīng)該是需要進(jìn)入對(duì)應(yīng)項(xiàng)目根目錄下進(jìn)行如此操作的。
mvn package
-
java -jar命令啟動(dòng)
java -jar [jar包文件路徑]
其實(shí)打包啟動(dòng)的詳細(xì)配置還有很多,這里我們不多說,后續(xù)有的是機(jī)會(huì)描述。
是不是覺得這么一步一步構(gòu)建也挺麻煩的?不用怕,模板化構(gòu)建會(huì)很快讓你改變看法
模板化構(gòu)建
關(guān)于模板化構(gòu)建,簡單來講就是在“笨辦法構(gòu)建一個(gè)SpringBoot”里面所描述的東西,我們一步帶過,通過一個(gè)模板工具,填寫一些參數(shù),讓工具幫我們生成我們要的基礎(chǔ)構(gòu)建。
一般常見構(gòu)建方法有三種:
- 在線構(gòu)建
- IDEA構(gòu)建
- STS構(gòu)建
在線構(gòu)建
SpringBoot官方提供的構(gòu)建方式,通過在一個(gè)頁面填寫參數(shù)生成一個(gè)可用IDE導(dǎo)入的文件。
這個(gè)神奇的網(wǎng)站就是:https://start.spring.io/
但愿不要被墻
在這個(gè)頁面,一般需要填寫幾個(gè)參數(shù)
- 構(gòu)建方式:Maven還是Gradle
- 語言:java or other
- SpringBootbanben hao
- 項(xiàng)目的組織ID(包名)
- 模塊名稱
- 項(xiàng)目依賴
寫好過后就可以生成下載文件了。
我們?cè)贓clipse中,以maven的方式導(dǎo)入,然后項(xiàng)目,右鍵,maven,updateProject,選中Froce Upadate of Shnapshots/Realease后,點(diǎn)擊OK。——這樣可以解決項(xiàng)目導(dǎo)入過后的報(bào)錯(cuò)。
IDEA構(gòu)建
社區(qū)版的IDEA無法構(gòu)建,請(qǐng)知悉
由于筆者不會(huì)選擇這種方式(垃圾電腦),故只是說下入口。
- 創(chuàng)建項(xiàng)目的時(shí)候,選擇 Spring Initializer
- ……
STS構(gòu)建
STS是spring tool suite的縮寫,是基于eclipse的的工具。是開發(fā)spring應(yīng)用對(duì)eclipse進(jìn)行定制的產(chǎn)物,為spring應(yīng)用的開發(fā)提供充分的支持,使spring開發(fā)更加的簡單、高效。
all in one的形式下載:下載地址
關(guān)于離線安裝方式,這篇文章寫的很清楚了。使用方式
項(xiàng)目new--> spring start project,即可開啟STS構(gòu)建。
筆者稍微試了一下,maven在中國的速度,真是驚天地,泣鬼神。。。。。
為毛我覺得使用了撐桿工具加速,更坑了呢?
我RNMGB,越搞越爛,一堆報(bào)錯(cuò)。。。。
我知道你需要這個(gè),阿里云鏡像配置。
FAQ
Q:新建項(xiàng)目pom.xml中報(bào)錯(cuò):Failure to transfer org.apache.maven.plugins:maven-compiler-plugin:pom:3.5.0 from ……
A:解決辦法,右鍵工程,選擇maven->update project,勾選force update ……,點(diǎn)擊OK。
同時(shí)筆者建議,最好去掉自動(dòng)build(在菜單欄的project里面關(guān)閉。)
Q:eclipse的maven構(gòu)建很慢啊!!
A:請(qǐng)用阿里云鏡像。這速度,跟之前比就是飛起了。如果沒有安裝maven,eclipse自帶的,思路是自己興建一個(gè)maven的config文件,請(qǐng)見