Spring Boot快速开发利器:Spring Boot CLI

Spring Boot CLI(Command Line Interface)是一个命令行工具,您可以用它来快速构建Spring原型应用。通过Spring Boot CLI,我们可以通过编写Groovy脚本来快速的构建出Spring Boot应用,并通过命令行的方式将其运行起来。下来,我们来学习一下如何安装和使用Spring Boot CLI。

安装Spring Boot CLI

关于Spring Boot CLI的安装方式有很多,这里根据目前主要主流的开发平台,具体介绍一下Windows和Mac下的安装方式:

通用安装

先介绍一个所有平台都可以使用的安装方法。

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

  • spring-boot-cli-2.0.1.RELEASE-bin.zip
  • spring-boot-cli-2.0.1.RELEASE-bin.tar.gz

第二步:解压下载内容,可以看到bin目录下已经有适用于windows和linux平台的两个可执行文件了,我们已经可以直接使用它;为了更方便的使用Spring Boot CLI的命令,我们可以将上面bin目录中对应的可执行文件加入到当前系统的环境变量即可。

Mac OSX Brew安装

在Mac OSX系统下面就非常方便了,我们可以通过Brew来进行安装,只需要分别执行下面的两条的命令即可:

$ brew tap pivotal/tap
$ brew install springboot

验证安装

不论使用哪种方法安装,在安装好之后,我们可以通过下面的命令来验证一下当前的安装结果:

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

运行Groovy脚本

在完成了Spring Boot CLI的安装之后,我们来试试使用它来快速的构建一个Spring Boot应用,方法很简单,只需要如下操作:

第一步:新建一个Groovy脚本,hello.groovy,内容如下:

@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应用就构建成功了,可以通过访问localhost:8080来验证一下上面应用提供的接口:

$ curl localhost:8080
Hello World!

是不是非常简单?有木有颠覆您对Java应用的印象?

参考文档:getting-started-installing-spring-boot


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软发现了一个超简单的NLP上分技巧,还发了ACL2022 ??

文 | QvQ编 | Sheryc_王苏今天给大家介绍一篇来自工业界巨头微软的工作&#xff0c;这篇论文真是把资本家的嘴脸暴露的一览无余&#xff1a;用最低的成本&#xff0c;创造最高的收益&#xff08;狗头.jpg&#xff09;文章从头到尾就阐述了一个结论&#xff1a;通过在输入文本中…

程序员面试金典 - 面试题 01.05. 一次编辑(编辑距离,DP)

1. 题目 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串&#xff0c;编写一个函数判定它们是否只需要一次(或者零次)编辑。 示例 1: 输入: first "pale" second "ple" 输出: True示例 2: 输入: first "pa…

Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭

上周发了一篇关于Spring Boot中使用Async来实现异步任务和线程池控制的文章&#xff1a;《Spring Boot使用Async实现异步调用&#xff1a;自定义线程池》。由于最近身边也发现了不少异步任务没有正确处理而导致的不少问题&#xff0c;所以在本文就接前面内容&#xff0c;继续说…

MIT毕业生亲述:在Deepmind打工是一种什么样的体验?

文 | Akhil Raju源 | 机器之心在这里&#xff0c;既有头脑风暴&#xff0c;也有生活气息。本月初&#xff0c;时任苹果机器学习总监的 Ian Goodfellow 宣布在加入公司三年后辞职&#xff0c;没过几天&#xff0c;就有消息曝出大神去向定了&#xff0c;他将重返谷歌加入 DeepMin…

LeetCode 72. 编辑距离(DP)

1. 题目 给定两个单词 word1 和 word2&#xff0c;计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1: 输入: word1 "horse", word2 "ros" 输出: 3 解…

毕业后到底去学术界还是工业界?杜克大学陈怡然教授亲述5条“小秘籍”

文 | 卖萌酱大家好&#xff0c;我是卖萌酱。今天和大家聊一个非常受关心的话题&#xff1a;毕业到底是去学术界还是工业&#xff1f;刚好最近看到杜克大学陈怡然教授在微博上对此有亲身感悟&#xff1a;陈怡然教授认为回学校而不去公司有以下几个理由&#xff1a;1. 我不喜欢随…

程序员面试金典 - 面试题 17.11. 单词距离(multimap平衡二叉搜索树)

1. 题目 有个内含单词的超大文本文件&#xff0c;给定任意两个单词&#xff0c;找出在这个文件中这两个单词的最短距离(相隔单词数)。 如果寻找过程在这个文件中会重复多次&#xff0c;而每次寻找的单词不同&#xff0c;你能对此优化吗? 示例&#xff1a; 输入&#xff1a;w…

腾讯薪酬改革来了!晋升≠加薪?员工到底为何工作?

文 | 天于刀刀这届打工人真的是太太太难了&#xff01;朝九晚九地写PPT&#xff0c;熬KPI&#xff0c;疫情它来了&#xff1b;终于习惯了隔离核酸&#xff0c;走出EMO&#xff0c;隔壁工位的同学被毕业了&#xff1b;最终凭着玄学幸运留组&#xff0c;还没来得及准备庆祝一下六…

Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题

LocalDate、LocalTime、LocalDateTime是Java 8开始提供的时间日期API&#xff0c;主要用来优化Java 8以前对于时间日期的处理操作。然而&#xff0c;我们在使用Spring Boot或使用Spring Cloud Feign的时候&#xff0c;往往会发现使用请求参数或返回结果中有LocalDate、LocalTim…

LeetCode 1054. 距离相等的条形码(优先队列)

1. 题目 在一个仓库里&#xff0c;有一排条形码&#xff0c;其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码&#xff0c;使其中两个相邻的条形码 不能 相等。 你可以返回任何满足该要求的答案&#xff0c;此题保证存在答案。 示例 1&#xff1a; 输入&#xff1a…

Meta AI团队大换血!组织拆散,高管离职,LeCun进军元宇宙??

编 | 桃子 时光源 | 新智元【导读】全力助攻元宇宙&#xff0c;Meta人工智能部门要重组了&#xff01;今天&#xff0c;Yann LeCun发文表示&#xff0c;Meta的人工智能实验室FAIR将整合到Reality Labs中。另外&#xff0c;任职4年的人工智能高管Jerome Pesenti也宣布了将要离职…

【译】Spring Boot 2.0 官方迁移指南

前提 希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0。 在你开始之前 首先&#xff0c;Spring Boot 2.0 需要 Java 8 或更高版本。不再支持 Java 6 和 7 了。 在 Spring Boot 2.0 中&#xff0c;许多配置属性被重新命名/删除&#xff0c;开发人员需要更新application…

剑指Offer - 面试题22. 链表中倒数第k个节点(快慢指针)

1. 题目 输入一个链表&#xff0c;输出该链表中倒数第k个节点。为了符合大多数人的习惯&#xff0c;本题从1开始计数&#xff0c;即链表的尾节点是倒数第1个节点。例如&#xff0c;一个链表有6个节点&#xff0c;从头节点开始&#xff0c;它们的值依次是1、2、3、4、5、6。这个…

AI正在改变制造业!快递单信息抽取、智能物流仓案例盘点

大家好&#xff0c;我是卖萌酱。制造业作为国民经济主体&#xff0c;是国家创造力、竞争力和综合国力的重要体现。作为制造强国建设的主攻方向&#xff0c;智能制造发展水平关乎我国未来制造业的全球地位。制造业与物流结合紧密&#xff0c;随着制造业的高速发展&#xff0c;对…

Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent

今天继续来聊Spring Boot 2.0的新特性。本文将具体说说2.0版本中的事件模型&#xff0c;尤其是新增的事件&#xff1a;ApplicationStartedEvent。 在Spring Boot 2.0中对事件模型做了一些增强&#xff0c;主要就是增加了ApplicationStartedEvent事件&#xff0c;所以在2.0版本中…

剑指Offer - 面试题57. 和为s的两个数字(双指针)

1. 题目 输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数字的和等于s&#xff0c;则输出任意一对即可。 示例 1&#xff1a; 输入&#xff1a;nums [2,7,11,15], target 9 输出&#xff1a;[2,7] 或者 [7,…

爷青结!吴恩达十年《机器学习》课程关闭注册!网友:一个时代的终结

文 | 杜伟、陈萍源 | 机器之心俗语说&#xff0c;旧的不去新的不来。也许新课程又会成为新的经典呢。要说人工智能领域的课程&#xff0c;斯坦福大学客座教授吴恩达的《机器学习》&#xff08;Machine Learning&#xff09;堪称经典。该课程最开始于 2012 年在 Coursera 上线&a…

Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析

在Spring Boot 2.0中推出了Relaxed Binding 2.0&#xff0c;对原有的属性绑定功能做了非常多的改进以帮助我们更容易的在Spring应用中加载和读取配置信息。下面本文就来说说Spring Boot 2.0中对配置的改进。 配置文件绑定 简单类型 在Spring Boot 2.0中对配置属性加载的时候会…

剑指Offer - 面试题57 - II. 和为s的连续正数序列(滑动窗口)

1. 题目 输入一个正整数 target &#xff0c;输出所有和为 target 的连续正整数序列&#xff08;至少含有两个数&#xff09;。 序列内的数字由小到大排列&#xff0c;不同序列按照首个数字从小到大排列。 示例 1&#xff1a; 输入&#xff1a;target 9 输出&#xff1a;[[…

博士读一半,导师跳槽了!博士生把亲身经历发在了Science上

源 | 微算云平台、知乎有这样一个迫在眉睫的问题&#xff0c;困扰着博士生&#xff1a;导师要跳槽&#xff0c;自己该怎么办&#xff1f;▲图源&#xff1a;知乎同样的&#xff0c;Jessica Toothaker 是匹兹堡大学医学院的一名博士生&#xff0c;也是耶鲁大学的访问学生。在她读…