SpringBoot良心教程(三)一篇入門HelloWorld
1、Maven配置
SpringBoot官方要求maven3.5以上 & Java8
$ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
$ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
首先在cmd通過maven-v
和java -version
確定maven版本和Java版本有沒有問題,然後在maven安裝路徑如D:\Software\DevelopmentTools\apache-maven-3.8.1\conf
找到settings檔案,將以下配置放入檔案,之前配置過就修改,沒配置過就直接貼上。
配置後maven下載依賴時使用阿里雲的國內映象,下載速度快,maven編譯專案時使用jdk1.8
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors> <profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles>
2、編寫HelloWorld
需求
瀏覽傳送/hello請求,響應Hello,SpringBoot2。
老方法
如果是使用之前的Servlet方式,首先要建立一個web專案,匯入Spring,SpringMVC等一大堆依賴,然後編寫Spring、SpringMVC的一大堆配置檔案,整合Spring和SpringMVC,寫完以後開發業務程式碼,然後再將整個應用部署到Tomcat伺服器上,然後啟動執行。
SpringBoot怎麼做(按照官方文件教程來一步一步做)
建立專案
建立一個maven工程,建立之前,先檢查maven,將maven改為自己下載的版本,不要用Bundled版本和idea外掛版。
而且要修改settings檔案的地址,點選Override,覆寫配置檔案地址,maven倉庫檔案可以使用預設的:
建立一個maven工程
在pom.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
加入starter-web
在pom.xml檔案中將配置貼上進去,然後更新maven依賴
之前開發web應用,需要新增spring,springMVC等等一大堆依賴,現在只需要新增一個spring-boot-starter-web依賴,就可以了,web場景啟動器
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
然後web開發需要的依賴,就都匯入進去了
業務開發
建立一個Java類
package com.shuwei.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 主程式類
* @SpringBootApplication:表明這是一個SpringBoot應用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args); //固定寫法
}
}
然後再建立一個controller類,叫做HelloController,放在boot包裡
@Controller
public class controller {
@ResponseBody //表示要以字串的形式返回給瀏覽器
@RequestMapping("/hello")
public String handle01(){
return "Hello, Spring Boot 2!";
}
}
/hello請求的邏輯就寫完了,可能一個類裡面要處理很多個請求,都是要給瀏覽器返回字串,那直接將@ResponseBody
註解寫在類上,和@Controller同級的位置,表示這個類的每一個方法返回的資料都是直接寫給瀏覽器的,而不是跳轉到某個頁面。另:@ResponseBody用法詳解,SpringBoot有一個新註解,叫做@RestController
,其實就是@ResponseBody
和@Controller
的結合,這樣就可以改為:
//@Controller
//@ResponseBody
@RestController
public class controller {
@ResponseBody
@RequestMapping("/hello")
public String handle01(){
return "Hello, Spring Boot 2!";
}
}
進入@RestController
,可以看到就是@ResponseBody
和@Controller
的結合
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Controller;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller //這裡
@ResponseBody //這裡
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
啟動
只需要回到MainApplication.class,點選綠色三角,即可執行
然後,可以看到,tomcat服務已經起來了,然後在瀏覽器輸入localhost:8080/hello
SpringBoot的身份是一個整合者,目的是要簡化配置,整合用到的一系列配置,可以通過在resources下新建application.properties
檔案,來抽取配置,完成對很多東西的配置,比如在檔案內寫入server.port=8888
,重啟以後,埠就變為8888了,非常方便。
那究竟可以寫入哪些配置呢,官方文件給出了詳盡的說明。可以找到我們之前寫入的server.port
。
之前的web開發,我們需要將寫好的程式碼打成war包,SpringBoot簡化了這一操作,可以將應用直接打成可執行jar包(Executable jars),官方稱為"fat jars",因為這個jar包很大,裡面有一整套的執行環境。首先我們遵照官方文件,在pom檔案中加入外掛程式碼:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然後開啟maven,打包專案,按住ctrl多選clean和package,然後點選綠色箭頭
打包成功以後,開啟jar包所在資料夾,idea版本不同,有的為Show in explorer
在導航欄直接輸入cmd,即在當前路徑下開啟cmd
執行java -jar boot-01-helloworld-1.0-SNAPSHOT.jar,效果和在idea啟動是一樣的。
總結
SpringBoot的好處:
- 簡化配置,開箱即用,很多配置直接寫在application.properties中
- 簡化部署,一鍵啟動,再也不需要在目標伺服器安裝一大堆東西,比如tomcat,只需要在SpringBoot中引入一個外掛,把專案打成jar包即可,直接在目標伺服器執行即可。
注意點:
- 如果jar包的方式,服務沒起來,可能是因為cmd視窗開了快速編輯模式,在服務啟動過程,你點一下螢幕的位置,游標就會卡在那裡,在cmd標題欄右鍵屬性,把這個關掉即可。
- 如果在idea中,服務啟動時,提示缺少xxx依賴,說明有些依賴沒有下載完,將網路調整好,阿里雲mirror設定好(非必須,但調整後下載速度能快一點),在maven中點選重新整理,就可以將沒有下載好的依賴下載進來,第一次使用SpringBoot,需要耐心一點,下載的jar包比較多。
用壓縮軟體開啟之前打包的jar包,可以看到,裡面東西非常多,一整套執行環境都在裡面。
BOOT-INF/lib中,可以看到有很多jar包,其中就有tomcat-embed
,說明打成的這個jar包,SpringBoot已經幫我們內嵌了Tomcat,以及依賴的所有jar包
我們自己寫的邏輯在這裡:boot-01-helloworld-1.0-SNAPSHOT.jar\BOOT-INF\classes\com\shuwei\boot\boot