搭建工程
注:建議使用eclipse的STS插件創建Spring項目,而不是下面的Gradle項目,否則會導致有一些Spring文件不存在。
new Gradle Project,如下

點next,如下選擇第一個選項Gradle wrapper

點擊next,點finish
工程搭建好后,如下:

配置Gradle
配置build.gradle文件如下:
plugins {
id 'org.springframework.boot' version '1.5.4.RELEASE'
id 'java'
id 'eclipse'
}
jar {
baseName = 'myproject'
version = '0.0.1'
}
jar.into('/') {
from('src/main/java')
} //稍后,打包時介紹
repositories {
jcenter()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("org.springframework.boot:spring-boot-starter-test")
}
保存后,右擊該工程 -> Gradle -> ReFresh Gradle Project,這樣Gradle便會根據配置自動下載依賴包。
編寫代碼
在目錄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
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
以下對上面使用的幾個注解作簡單的解釋:
@RestController
為了方便,我們不使用@ResponseBody來注解所有@RequestMapping方法,取而代之使用@RestController。@RestController注解組合了@ResponseBody和@Controller,因此可以用@RestController代替這兩個注解。
@Controller
dispatcher會掃描被該注解所注解的類,以查找映射的方法並檢測@RequestMapping注解
@RequestMapping
使用該注解可以映射URL到一個類或者特定的處理方法上。
@EnableAutoConfiguration
Spring Boot自動配置(auto-configuration):嘗試根據你添加的jar依賴自動配置你的Spring應用。自從spring-boot-starter-web添加了Tomcat和Spring MVC,auto-configuration默認你開發的是一個web應用,並設置相應的Spring。
main方法:Java應用的入口。main方法通過調用SpringApplication.run方法把權利轉交給SpringApplication類。SpringApplication會自動配置Tomcat web服務器。我們需要把Example.class作為參數傳遞給run方法,告知SpringApplication這是一個Spring的首要組件。
運行Web應用
在這里使用Boot Dashboard啟動應用。圖標如下:

點擊以后出現以下界面:

右擊GradleProject_02,點擊(Re)start,出現以下啟動信息:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.4.RELEASE)
2017-06-28 16:11:59.652 INFO 6627 --- [ main] Example : Starting Example on wuchao-Lenovo with PID 6627 (/home/wuchao/eclipse-jee/workspace/GradleProject_02/bin started by wuchao in /home/wuchao/eclipse-jee/workspace/GradleProject_02)
2017-06-28 16:11:59.655 INFO 6627 --- [ main] Example : No active profile set, falling back to default profiles: default
2017-06-28 16:11:59.771 INFO 6627 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@78dd667e: startup date [Wed Jun 28 16:11:59 CST 2017]; root of context hierarchy
2017-06-28 16:12:02.864 INFO 6627 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-06-28 16:12:02.881 INFO 6627 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2017-06-28 16:12:02.882 INFO 6627 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.15
2017-06-28 16:12:03.086 INFO 6627 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-06-28 16:12:03.087 INFO 6627 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3324 ms
2017-06-28 16:12:03.236 INFO 6627 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-06-28 16:12:03.240 INFO 6627 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-06-28 16:12:03.240 INFO 6627 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-06-28 16:12:03.240 INFO 6627 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-06-28 16:12:03.241 INFO 6627 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-06-28 16:12:03.798 INFO 6627 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@78dd667e: startup date [Wed Jun 28 16:11:59 CST 2017]; root of context hierarchy
2017-06-28 16:12:03.928 INFO 6627 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String Example.home()
2017-06-28 16:12:03.938 INFO 6627 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-06-28 16:12:03.944 INFO 6627 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-06-28 16:12:04.071 INFO 6627 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-28 16:12:04.071 INFO 6627 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-28 16:12:04.115 INFO 6627 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-28 16:12:04.421 INFO 6627 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2017-06-28 16:12:04.576 INFO 6627 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-06-28 16:12:04.580 INFO 6627 --- [ main] Example : Started Example in 5.927 seconds (JVM running for 7.945)
在瀏覽器輸入http://localhost:8080/,便可返回以下信息:

Spring Boot 部署與服務配置
Server配置
# 項目contextPath,一般在正式發布版本中,我們不配置 server.context-path=/myspringboot # 錯誤頁,指定發生錯誤時,跳轉的URL。請查看BasicErrorController源碼便知 server.error.path=/error # 服務端口 server.port=9090 # session最大超時時間(分鍾),默認為30 server.session-timeout=60 # 該服務綁定IP地址,啟動服務器時如本機不是該IP地址則拋出異常啟動失敗,只有特殊需求的情況下才配置 # server.address=192.168.16.11
Tomcat配置
Tomcat為Spring Boot的默認容器,下面是幾個常用配置:
# tomcat最大線程數,默認為200 server.tomcat.max-threads=800 # tomcat的URI編碼 server.tomcat.uri-encoding=UTF-8 # 存放Tomcat的日志、Dump等文件的臨時文件夾,默認為系統的tmp文件夾(如:C:\Users\Shanhy\AppData\Local\Temp) server.tomcat.basedir=H:/springboot-tomcat-tmp # 打開Tomcat的Access日志,並可以設置日志格式的方法: #server.tomcat.access-log-enabled=true #server.tomcat.access-log-pattern= # accesslog目錄,默認在basedir/logs #server.tomcat.accesslog.directory= # 日志文件目錄 logging.path=H:/springboot-tomcat-tmp # 日志文件名稱,默認為spring.log logging.file=myapp.log
使用Profile區分環境
spring boot 可以在 “配置文件”、“Java代碼類”、“日志配置” 中來配置profile區分不同環境執行不同的結果
配置文件
以application.properties 為例,通過文件名來區分環境 application-{profile}.properties
創建application.properties文件
app.name=MyApp server.port=8080
創建application-dev.properties文件:
server.port=8081
創建application-stg.properties文件:
server.port=8082
在啟動程序的時候通過添加 –spring.profiles.active={profile} 來指定具體使用的配置
例如我們執行 java -jar demo.jar –spring.profiles.active=dev 那么上面3個文件中的內容將被如何應用?
Spring Boot 會先加載默認的配置文件,然后使用具體指定的profile中的配置去覆蓋默認配置。
在Eclipse中的Boot DashBoard中,啟動應用之前可以通過配置選擇指定的配置文件,如下:
右擊工程:

點擊Open Config

在Profile選項里選擇對應的參數stg或dev便可以選擇不同的配置文件。
創建可執行jar文件
在項目所在目錄執行gradle build即可,會在build/libs目錄下生成對應的jar文件。
注意:打包時配置文件並不會被打包,因此需要在build.gradle文件中加上以下內容:
jar.into('/') {
from('src/main/java')
}
目的是將src/main/java目錄下的所有文件拷貝到jar包運行的根目錄(class類所在的目錄),jar包的類和配置文件被放到/BOOT-INF/classes/目錄下。如下圖:

運行jar文件
java -jar myproject-0.0.1.jar -D spring.profiles.active=dev
其中參數-D spring.profiles.active=dev用來指定具體的配置文件application-dev.properties
輸出以下信息:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.4.RELEASE)
2017-06-28 17:35:59.108 INFO 11216 --- [ main] Example : Starting Example on wuchao-Lenovo with PID 11216 (/home/wuchao/eclipse-jee/workspace/GradleProject_02/build/libs/myproject-0.0.1.jar started by wuchao in /home/wuchao/eclipse-jee/workspace/GradleProject_02/build/libs)
2017-06-28 17:35:59.119 INFO 11216 --- [ main] Example : The following profiles are active: dev
2017-06-28 17:35:59.186 INFO 11216 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4534b60d: startup date [Wed Jun 28 17:35:59 CST 2017]; root of context hierarchy
2017-06-28 17:36:01.151 INFO 11216 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8081 (http)
2017-06-28 17:36:01.171 INFO 11216 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2017-06-28 17:36:01.172 INFO 11216 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.15
2017-06-28 17:36:01.273 INFO 11216 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-06-28 17:36:01.273 INFO 11216 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2090 ms
2017-06-28 17:36:01.426 INFO 11216 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-06-28 17:36:01.430 INFO 11216 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-06-28 17:36:01.431 INFO 11216 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-06-28 17:36:01.431 INFO 11216 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-06-28 17:36:01.431 INFO 11216 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-06-28 17:36:01.957 INFO 11216 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4534b60d: startup date [Wed Jun 28 17:35:59 CST 2017]; root of context hierarchy
2017-06-28 17:36:02.048 INFO 11216 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String Example.home()
2017-06-28 17:36:02.054 INFO 11216 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-06-28 17:36:02.055 INFO 11216 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-06-28 17:36:02.100 INFO 11216 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-28 17:36:02.101 INFO 11216 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-28 17:36:02.157 INFO 11216 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-28 17:36:02.346 INFO 11216 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2017-06-28 17:36:02.415 INFO 11216 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-06-28 17:36:02.420 INFO 11216 --- [ main] Example : Started Example in 3.838 seconds (JVM running for 4.389)
便可在瀏覽器中輸入http://localhost:8081/訪問該應用。
