Spring Boot快速開發(fā)利器:Spring Boot CLI

Spring Boot CLI(Command Line Interface)是一個命令行工具,您可以用它來快速構(gòu)建Spring原型應(yīng)用。通過Spring Boot CLI,我們可以通過編寫Groovy腳本來快速的構(gòu)建出Spring Boot應(yīng)用,并通過命令行的方式將其運行起來再悼。下來,我們來學(xué)習(xí)一下如何安裝和使用Spring Boot CLI膝但。

安裝Spring Boot CLI

關(guān)于Spring Boot CLI的安裝方式有很多冲九,這里根據(jù)目前主要主流的開發(fā)平臺,具體介紹一下Windows和Mac下的安裝方式:

通用安裝

先介紹一個所有平臺都可以使用的安裝方法跟束。

第一步:下載Spring Boot CLI的工具包:

第二步:解壓下載內(nèi)容娘侍,可以看到bin目錄下已經(jīng)有適用于windows和linux平臺的兩個可執(zhí)行文件了,我們已經(jīng)可以直接使用它泳炉;為了更方便的使用Spring Boot CLI的命令,我們可以將上面bin目錄中對應(yīng)的可執(zhí)行文件加入到當前系統(tǒng)的環(huán)境變量即可嚎杨。

Mac OSX Brew安裝

在Mac OSX系統(tǒng)下面就非常方便了花鹅,我們可以通過Brew來進行安裝,只需要分別執(zhí)行下面的兩條的命令即可:

$ brew tap pivotal/tap
$ brew install springboot

驗證安裝

不論使用哪種方法安裝枫浙,在安裝好之后刨肃,我們可以通過下面的命令來驗證一下當前的安裝結(jié)果:

$ spring --version
Spring CLI v2.0.0.RELEASE

運行Groovy腳本

在完成了Spring Boot CLI的安裝之后,我們來試試使用它來快速的構(gòu)建一個Spring Boot應(yīng)用箩帚,方法很簡單真友,只需要如下操作:

第一步:新建一個Groovy腳本,hello.groovy紧帕,內(nèi)容如下:

@RestController
class ThisWillActuallyRun {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }
    
}

第二步:使用spring命令運行該Groovy腳本盔然,具體如下:

$ spring run hello.groovy
Resolving dependencies...............................................




                                *::::::::::::::*
                           ::::::::::::::::::::::::::
                        ::::::::::::::::::::::::::::::::       :.
                     *:::::::::::::::::::::::::::::::::::::   :*:
                   :::::::::::::::::::::::::::::::::::::::::::  *:
                 .::::::::::::::::::::::::::::::::::::::::::     :
                ::::::::::::::::::::::::::::::::::::::::::.      .:
               :::::::::::::::::::::::::::::::::::::::::          :
              ::::::::::::::::::::::::::::::::::::::              *:
             :::::::::::::::::::::::::::::::::*                    :
            :::::::::::::::::::*                                   :
            :::::::::::::::                                 *      *:
           .::::::::::::                                   *       .:
           :::::::::::.                                   :         :
           ::::::::::                                    :         .:
           ::::::::::                                  ::          .:
           .::::::::                                 :::           :*
            ::::::::                               :::             :
            ::::::::                            ::::              ::
             :::::::                         :::::               *:
              :::::::                   *:::::::                ::
               :::::::.          :::::::::::                  :::
                :::::::::::::::::::::::*                    ::::
                 .:::   :::::::::*                      .:::::*
                   :     ::::::::::::::::::::::::::::::::::::
                     . .:::::::::::::::::::::::::::::::::::
                        ::::::::::::::::::::::::::::::::
                           ::::::::::::::::::::::::::
                                *::::::::::::::*



2018-04-04 18:11:20.571  INFO 70477 --- [       runner-0] o.s.boot.SpringApplication               : Starting application on zhaiyongchaodeMacBook-Pro.local with PID 70477 (started by zhaiyongchao in /Users/zhaiyongchao/Downloads)
2018-04-04 18:11:20.574  INFO 70477 --- [       runner-0] o.s.boot.SpringApplication               : No active profile set, falling back to default profiles: default
2018-04-04 18:11:20.732  INFO 70477 --- [       runner-0] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@3c3ad454: startup date [Wed Apr 04 18:11:20 CST 2018]; root of context hierarchy
2018-04-04 18:11:21.758  INFO 70477 --- [       runner-0] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2018-04-04 18:11:21.783  INFO 70477 --- [       runner-0] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-04-04 18:11:21.784  INFO 70477 --- [       runner-0] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.28
2018-04-04 18:11:21.795  INFO 70477 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/zhaiyongchao/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2018-04-04 18:11:21.849  INFO 70477 --- [ost-startStop-1] org.apache.catalina.loader.WebappLoader  : Unknown loader org.springframework.boot.cli.compiler.ExtendedGroovyClassLoader$DefaultScopeParentClassLoader@5e3b901 class org.springframework.boot.cli.compiler.ExtendedGroovyClassLoader$DefaultScopeParentClassLoader
2018-04-04 18:11:21.884  INFO 70477 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-04-04 18:11:21.885  INFO 70477 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1153 ms
2018-04-04 18:11:22.042  INFO 70477 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-04-04 18:11:22.049  INFO 70477 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-04-04 18:11:22.049  INFO 70477 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-04-04 18:11:22.049  INFO 70477 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-04-04 18:11:22.049  INFO 70477 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-04-04 18:11:22.391  INFO 70477 --- [       runner-0] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@3c3ad454: startup date [Wed Apr 04 18:11:20 CST 2018]; root of context hierarchy
2018-04-04 18:11:22.489  INFO 70477 --- [       runner-0] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String ThisWillActuallyRun.home()
2018-04-04 18:11:22.495  INFO 70477 --- [       runner-0] 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.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-04-04 18:11:22.496  INFO 70477 --- [       runner-0] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-04-04 18:11:22.550  INFO 70477 --- [       runner-0] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-04-04 18:11:22.550  INFO 70477 --- [       runner-0] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-04-04 18:11:22.598  INFO 70477 --- [       runner-0] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-04-04 18:11:22.955  INFO 70477 --- [       runner-0] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-04-04 18:11:23.004  INFO 70477 --- [       runner-0] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-04-04 18:11:23.010  INFO 70477 --- [       runner-0] o.s.boot.SpringApplication               : Started application in 17.605 seconds (JVM running for 79.248)

從日志中我們可以看到我們通過Groovy腳本定義的一個簡單web應(yīng)用就構(gòu)建成功了,可以通過訪問localhost:8080來驗證一下上面應(yīng)用提供的接口:

$ curl localhost:8080
Hello World!

是不是非常簡單是嗜?有木有顛覆您對Java應(yīng)用的印象愈案?

原文:http://blog.didispace.com/Spring-Boot%E5%BF%AB%E9%80%9F%E5%BC%80%E5%8F%91%E5%88%A9%E5%99%A8%EF%BC%9ASpring-Boot-CLI/

參考文檔:getting-started-installing-spring-boot

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鹅搪,隨后出現(xiàn)的幾起案子站绪,更是在濱河造成了極大的恐慌,老刑警劉巖丽柿,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恢准,死亡現(xiàn)場離奇詭異魂挂,居然都是意外死亡,警方通過查閱死者的電腦和手機馁筐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門涂召,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人眯漩,你說我怎么就攤上這事芹扭。” “怎么了赦抖?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵舱卡,是天一觀的道長。 經(jīng)常有香客問我队萤,道長轮锥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任要尔,我火速辦了婚禮舍杜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赵辕。我一直安慰自己既绩,他們只是感情好,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布还惠。 她就那樣靜靜地躺著饲握,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚕键。 梳的紋絲不亂的頭發(fā)上救欧,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音锣光,去河邊找鬼笆怠。 笑死,一個胖子當著我的面吹牛誊爹,可吹牛的內(nèi)容都是我干的蹬刷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼频丘,長吁一口氣:“原來是場噩夢啊……” “哼箍铭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起椎镣,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤诈火,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冷守,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡刀崖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拍摇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亮钦。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖充活,靈堂內(nèi)的尸體忽然破棺而出蜂莉,到底是詐尸還是另有隱情,我是刑警寧澤混卵,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布映穗,位于F島的核電站,受9級特大地震影響幕随,放射性物質(zhì)發(fā)生泄漏蚁滋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一赘淮、第九天 我趴在偏房一處隱蔽的房頂上張望辕录。 院中可真熱鬧,春花似錦梢卸、人聲如沸走诞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽速梗。三九已至,卻和暖如春襟齿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枕赵。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工猜欺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拷窜。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓开皿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親篮昧。 傳聞我的和親對象是個殘疾皇子赋荆,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容