您好,登錄后才能下訂單哦!
SpringBoot如何進行配置與使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
簡介
Spring 框架是非常著名的 Java 開源框架,歷經十多年的發展,整個生態系統已經非常完善甚至是繁雜,Spring Boot 正是為了解決這個問題而開發的,為 Spring 平臺和第三方庫提供了開箱即用的設置,只需要很少的配置就可以開始一個 Spring 項目。當然,建議使用 Java 8 來進行開發。
Spring Boot 實際上走的是 Servlet 的路線,所以需要一個 Servlet 容器,什么 Tomcat/Jetty 都支持,比較意外的是居然還支持 Undertow(Undertow 大法好)。
安裝
簡單粗暴直接上命令行,具體的簡介參考注釋
# 確定 Java 版本 dawang:~ dawang$ java -version java version "1.8.0_91" Java(TM) SE Runtime Environment (build 1.8.0_91-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode) # 安裝 Spring Boot CLI # 這是第一條語句 dawang:~ dawang$ brew tap pivotal/tap ==> Tapping pivotal/tap Cloning into '/usr/local/Library/Taps/pivotal/homebrew-tap'... remote: Counting objects: 16, done. remote: Compressing objects: 100% (14/14), done. remote: Total 16 (delta 2), reused 5 (delta 0), pack-reused 0 Unpacking objects: 100% (16/16), done. Checking connectivity... done. Tapped 9 formulae (50 files, 46.1K) # 這是第二條語句 dawang:~ dawang$ brew install springboot ==> Installing springboot from pivotal/tap ==> Downloading https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.6.RELEASE/spring-boot-cli-1.3.6.RELEASE-bin.tar. ######################################################################## 100.0% ==> Caveats Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions ==> Summary :beer: /usr/local/Cellar/springboot/1.3.6.RELEASE: 6 files, 8.9M, built in 4 minutes 39 seconds
然后我們就可以試試看 Spring CLI 的強大威力了!創建一個名為 app.groovy 的文件
@RestController class ThisWillActuallyRun { @RequestMapping("/") String home() { "Hello World" } }
只需要運行 spring run app.groovy
即可!然而,在我的機器上并沒有這么順利, spring 已經被 ruby 無情占用,只好在 .bashrc 中新建一個別名 alias springj="/usr/local/Cellar/springboot/1.3.6.RELEASE/bin/spring
" ,然后用 springj run app.groovy
運行。
還不行!打開 localhost:8080 的時候發現機器啟動著 nginx,所以要先把 nginx 關掉,具體的步驟是
# 查找對應的進程號 ps aux | grep nginx # 發送關閉信號 kill -QUIT [nginx 主進程 pid]
解決掉各種攔路虎,我們再次運行 springj run app.groovy ,就可以在瀏覽器中見到 Hello World 了。
dawang$ springj run app.groovy Resolving dependencies....... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.3.6.RELEASE)
最后我們需要安裝的有Gradle 和 IntelliJ IDEA CE ,這里就不贅述了,安裝好了我們就可以進行下一步了
Hello World
在 Spring INITIALIZR 進行簡單設置即可生成項目模板,如下圖所示:
然后我們把下載的文件解壓并導入 IntelliJ 中,稍作等待即可。
目錄結構如上圖所示,我們直接運行這個 main 函數看看,控制臺中的輸出為
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.3.6.RELEASE) 2016-07-19 19:29:41.235 INFO 65812 --- [ main] wdx.helloworld.HellowordApplication : Starting HellowordApplication on dawang.local with PID 65812 (/Users/dawang/Documents/DJI/Code/helloword/build/classes/main started by dawang in /Users/dawang/Documents/DJI/Code/helloword) 2016-07-19 19:29:41.239 INFO 65812 --- [ main] wdx.helloworld.HellowordApplication : No active profile set, falling back to default profiles: default 2016-07-19 19:29:41.320 INFO 65812 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@545997b1: startup date [Tue Jul 19 19:29:41 CST 2016]; root of context hierarchy 2016-07-19 19:29:42.336 INFO 65812 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2016-07-19 19:29:42.353 INFO 65812 --- [ main] wdx.helloworld.HellowordApplication : Started HellowordApplication in 1.865 seconds (JVM running for 3.141) 2016-07-19 19:29:42.354 INFO 65812 --- [ Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@545997b1: startup date [Tue Jul 19 19:29:41 CST 2016]; root of context hierarchy 2016-07-19 19:29:42.356 INFO 65812 --- [ Thread-1] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown Process finished with exit code 0
當然,因為我們的程序中沒有做任何操作,也沒有配合 Web 模塊,所以加載 Spring 完成之后就結束了。
我們看看項目對應的 build.gradle ,其中只包含了兩個模塊:
dependencies { compile('org.springframework.boot:spring-boot-starter') testCompile('org.springframework.boot:spring-boot-starter-test') }
其中:
我們加入 spring-boot-starter-web 模塊,對應的 dependencies 部分為
dependencies { compile('org.springframework.boot:spring-boot-starter') compile('org.springframework.boot:spring-boot-starter-web') testCompile('org.springframework.boot:spring-boot-starter-test') }
然后在 wdx.helloworld.web 這個 package 中加入一個 HelloController 類:
package wdx.helloworld.web; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by dawang on 16/7/20. */ @RestController public class HelloController { @RequestMapping("/hello") public String index() { return "Hello World! This is wdxtub."; } }
再啟動主程序,訪問 localhost:8080/hello 時就可以看到結果了:
然后我們編寫一下對應的測試 HellowordApplicationTests (單詞拼錯了不要在意這些細節),注意需要引入一些 static 方法:
package wdx.helloworld; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.http.MediaType; import org.springframework.mock.web.MockServletContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import wdx.helloworld.web.HelloController; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.hamcrest.Matchers.equalTo; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = MockServletContext.class) @WebAppConfiguration public class HellowordApplicationTests { private MockMvc mvc; @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build(); } @Test public void getHello() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo("Hello World! This is wdxtub."))); } }
具體測試簡單來說就是使用 MockServletContext 來創建一個新的 WebApplicationContext ,然后我們就可以模擬訪問 localhost:8080/hello 了,運行該測試,可以發現一切正常。
至此,我們就了解了如何開始一個 Spring Boot 項目,并編寫了一個簡單的路由用來顯示對應內容。接下來我們會更多介紹開發相關的其他知識。
Starter POMs
簡單來說,Starter POMs 是方便我們快速給應用添加功能的,只需要在 build.gradle 中包含對應的 starter,可以省去大量的配置和依賴管理,下面是一些常用的 starter
如果想要切換容器和日志系統可以用下面的包
更多社區貢獻的 starter POMs 可以在 這里 查閱。
組織代碼最佳實踐
不要使用 default package ,建議使用反轉的域名來命名包
把 main 應用類放在 root package 中,其他的類放在子包中,結構如下所示
wdx +- helloworld +- HelloworldApplication.java <- main class | +- web | +- HelloController.java | +- service | +- CustomerService.java
打包運行
我們在終端中執行 gradle assemble 可以生成一個 jar 包,也可以直接執行這個 jar 包來啟動整個應用,如
dawang:helloword dawang$ java -jar build/libs/helloword-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.3.6.RELEASE) 2016-07-20 13:11:01.859 INFO 36943 --- [ main] wdx.helloworld.HellowordApplication : Starting HellowordApplication on dawang.local with PID 36943 (/Users/dawang/Documents/DJI/Code/helloword/build/libs/helloword-0.0.1-SNAPSHOT.jar started by dawang in /Users/dawang/Documents/DJI/Code/helloword) 2016-07-20 13:11:01.864 INFO 36943 --- [ main] wdx.helloworld.HellowordApplication : No active profile set, falling back to default profiles: default 2016-07-20 13:11:01.960 INFO 36943 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@67424e82: startup date [Wed Jul 20 13:11:01 CST 2016]; root of context hierarchy 2016-07-20 13:11:03.727 INFO 36943 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 2016-07-20 13:11:03.750 INFO 36943 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat 2016-07-20 13:11:03.752 INFO 36943 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.36 2016-07-20 13:11:03.897 INFO 36943 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2016-07-20 13:11:03.897 INFO 36943 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1943 ms 2016-07-20 13:11:04.275 INFO 36943 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2016-07-20 13:11:04.282 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2016-07-20 13:11:04.283 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2016-07-20 13:11:04.283 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2016-07-20 13:11:04.284 INFO 36943 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2016-07-20 13:11:04.658 INFO 36943 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@67424e82: startup date [Wed Jul 20 13:11:01 CST 2016]; root of context hierarchy 2016-07-20 13:11:04.751 INFO 36943 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hello]}" onto public java.lang.String wdx.helloworld.web.HelloController.index() 2016-07-20 13:11:04.755 INFO 36943 --- [ 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) 2016-07-20 13:11:04.755 INFO 36943 --- [ 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) 2016-07-20 13:11:04.810 INFO 36943 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2016-07-20 13:11:04.810 INFO 36943 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2016-07-20 13:11:04.875 INFO 36943 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2016-07-20 13:11:05.028 INFO 36943 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2016-07-20 13:11:05.145 INFO 36943 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2016-07-20 13:11:05.151 INFO 36943 --- [ main] wdx.helloworld.HellowordApplication : Started HellowordApplication in 4.0 seconds (JVM running for 4.484)
當然,因為需要包含所有的依賴,整個 jar 包會比較大。如果想要開啟遠程調試,命令為
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar build/libs/helloword-0.0.1-SNAPSHOT.jar
Gradle 運行
當然我們也可以簡單使用內置的 Gradle 腳本來運行,直接 gradle bootRun 即可。
配置 Undertow
如果想要用 Undertow 來替換默認的 Tomcat,也可以簡單在 build.gradle 中進行配置,比如:
configurations { compile.exclude module: "spring-boot-starter-tomcat" } dependencies { compile('org.springframework.boot:spring-boot-starter') compile('org.springframework.boot:spring-boot-starter-web') compile('org.springframework.boot:spring-boot-starter-undertow') testCompile('org.springframework.boot:spring-boot-starter-test') }
然后使用 gradle bootRun 即可。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。