創(chuàng)建POM:
創(chuàng)建一個(gè)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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zzhblh</groupId>
<artifactId>testspringboot</artifactId>
<version>1.0-SNAPSHOT</version>
<!--不標(biāo)注packaging的話,默認(rèn)為jar-->
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<!-- Spring默認(rèn)使用jdk1.6僚纷,如果你想使用jdk1.8谴餐,你需要在pom.xml的屬性里面添加java.version -->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
如果再次運(yùn)行mvn dependency:tree彤敛,你將看到現(xiàn)在多了一些其他依賴掠抬,包括Tomcat web服務(wù)器和Spring Boot自身。
寫一個(gè)Hello World:
創(chuàng)建一個(gè)單獨(dú)的Java文件聘鳞。Maven默認(rèn)會(huì)編譯src/main/java下的源碼薄辅,所以你需要?jiǎng)?chuàng)建那樣的文件結(jié)構(gòu),并添加一個(gè)名為src/main/java/Example.java的文件:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@SpringBootApplication
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
- @SpringBootApplication等于@Configuration抠璃,@EnableAutoConfiguration站楚,@ComponentScan三個(gè)注解的組合。
- @EnableAutoConfiguration表示讓Spring Boot根據(jù)類路徑中的jar包依賴為當(dāng)前項(xiàng)目進(jìn)行自動(dòng)配置搏嗡。比如窿春,添加了spring-boot-starter-web這個(gè)基礎(chǔ)依賴,spring boot會(huì)自動(dòng)添加tomcat和Spring MVC的依賴采盒,并且自動(dòng)對(duì)他們進(jìn)行配置旧乞。
- @ComponentScan表示自動(dòng)bean掃描注入,如果啟動(dòng)類在根包下面磅氨,Spring Boot會(huì)在根包下面搜索注有@Component, @Service, @Repository,@Controller注解的所有類尺栖,并將他們注冊(cè)為Spring Beans,或根據(jù)需要在@ComponentScan注解上定義basePackages或者其他屬性烦租。
- spring boot的啟動(dòng)是靠一個(gè)名為Application的入口類來實(shí)現(xiàn)的延赌,入口類其實(shí)就是一個(gè)標(biāo)準(zhǔn)的Java靜態(tài)方法類,使用了一個(gè)對(duì)象SpringApplication的run方法來啟動(dòng)Spring Boot項(xiàng)目叉橱。由于Spring Boot會(huì)自動(dòng)掃描@SpringBootApplication所在類的同級(jí)包以及下級(jí)包里的所有bean挫以,所以,官方建議入口類放在最外層的包名下窃祝。比如:
com.zzhblh/Application.java
- spring boot封裝所有配置信息為鍵值類型掐松,你想改變默認(rèn)配置,只需要向應(yīng)用傳入這個(gè)鍵值對(duì)就可以锌杀,比如我們想改變綁定端口為8081甩栈,那么你在main方法里傳入“—server.port=8081”即可。
SpringApplication.run(SampleController.class, "--server.port=8081");
- spring boot工程的默認(rèn)web容器是Tomcat糕再,當(dāng)然也可以根據(jù)需要修改量没,spring boot提供了對(duì)應(yīng)的starters。先在pom文件中排除tomcat的starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
增加jetty依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
配置文件:
除了上面?zhèn)鲄⒌姆椒ㄍ幌耄S玫氖鞘褂门渲梦募固悖瑂rc/main/resource/application.properties
#內(nèi)嵌tomcat配置
server.port=8080
#server.context-path= //如果沒有值就不配置,可以使用默認(rèn)猾担,但不要在這里留空袭灯,會(huì)有錯(cuò)誤
server.tomcat.uri-encoding=UTF-8
啟動(dòng):
此時(shí)在項(xiàng)目根目錄下執(zhí)行mvn spring-boot:run啟動(dòng)應(yīng)用
在瀏覽器輸入http://localhost:8080/ ,你會(huì)看到Hello World!字樣绑嘹,這是一個(gè)web應(yīng)用稽荧,使用了嵌入式的tomcat」ひ福總結(jié)下Spring Boot應(yīng)用的啟動(dòng)流程:
- spring boot應(yīng)用打包之后姨丈,生成一個(gè)fat jar畅卓,里面包含了應(yīng)用依賴的jar包,還有Spring boot loader相關(guān)的類蟋恬。
- Fat jar的啟動(dòng)Main函數(shù)是JarLauncher翁潘,它負(fù)責(zé)創(chuàng)建一個(gè)LaunchedURLClassLoader來加載/lib下面的jar,并以一個(gè)新線程啟動(dòng)應(yīng)用的Main函數(shù)歼争。
創(chuàng)建可執(zhí)行的jar:
創(chuàng)建可執(zhí)行的jar拜马,我們需要將spring-boot-maven-plugin添加到pom.xml中,在dependencies節(jié)點(diǎn)后面插入spring boot插件:
<?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>
<groupId>com.zzhblh</groupId>
<artifactId>testspringboot</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
此時(shí)在項(xiàng)目根目錄下運(yùn)行mvn package沐绒,查看target目錄俩莽,你應(yīng)該可以看到testspringboot-0.0.1-SNAPSHOT.jar,該文件大概有10Mb洒沦。想查看內(nèi)部結(jié)構(gòu)豹绪,可以運(yùn)行$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
。在該目錄下申眼,你應(yīng)該還能看到一個(gè)很小的名為testspringboot-0.0.1-SNAPSHOT.jar.original的文件瞒津,這是在Spring boot重新打包前,Maven創(chuàng)建的原始jar文件括尸∠矧剑可以使用java -jar命令運(yùn)行該應(yīng)用程序$ java -jar target/testspringboot-0.0.1-SNAPSHOT.jar
。同樣在瀏覽器輸入http://localhost:8080/濒翻, 你會(huì)看到Hello World!字樣屁柏,這是一個(gè)web應(yīng)用,使用了嵌入式的tomcat有送。ctrl-c退出淌喻。如果你仍然想生成war包(不包含內(nèi)嵌的容器等),你需要把應(yīng)用的主類改為繼承SpringBootServletInitializer:
@SpringBootApplication
public class Example extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Example.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
然后更新你的構(gòu)建配置pom.xml雀摘,將packaging改為war,并將內(nèi)嵌容器的依賴標(biāo)記為provided裸删。
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
參考:
https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/II.%20Getting%20started/8.%20Introducing%20Spring%20Boot.html
http://www.reibang.com/p/5ac18abc91f0