Sprint Boot入門(1):創建第一個Spring Boot應用


搭建工程

注:建議使用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 部署與服務配置

Spring Boot的配置依賴application.properties文件(位於src/main/java/),因此創建該文件。

Server配置

對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/訪問該應用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM