由于读者的数量越来越多,难免会被问到一些我自己都觉得不好意思的问题,比如说前几天小王就问我:“二哥,快教教我,怎么通过 Spring Boot 创建一个 Hello World 项目啊?”

收到问题的时候,我都惊呆了!什么年头了,还不会用 Spring Boot,大清朝早亡了啊!


没等我发牢骚,小王就紧接着说:“二哥,你先别生气,我投了 14 份简历才在三线小镇的一家小公司找到一份实习工作,不容易啊,领导给我安排了一个小活儿,就是搭一个 Spring Boot 的小项目,估计是测试我的实战能力吧。听说二哥热肠古道,我就抱着试一试的心态添加了你的好友。”

话说到这份上,我的气自然也就消了。随后,我花了五分钟的时间帮他解决了苦恼,没成想,他还发给我了一个小红包,表示对我的感谢。并建议我写一篇文章出来,因为他觉得像他这样的小白还有很多。期初我是有些犹豫的,毕竟网上写 Spring Boot 的文章已经很多了,况且还是“Hello World”,写出来会不会遭人喷啊。但转念一想,哪怕只有一个读者需要也是我们作者应尽的义务啊。于是就有了大家看到的这篇文章。

00、Spring Boot 简介

我猜,大家一定编写过基于 Spring 的应用程序,你就知道一个“Hello World”就需要大量的配置。想一想,我自己都有点怀疑,还能不能创建的出来,尤其是那些 XML 文件,完全敲不出来。

Spring Boot 使您能轻松地创建独立的、生产级的、基于 Spring 且能直接运行的应用程序。我们对 Spring 平台和第三方库有自己的看法,所以您从一开始只会遇到极少的麻烦。

看看 Spring Boot 官网对自己的“王婆卖瓜自卖自夸”,感觉确实优秀啊。这意味着我们只需极少的配置,就可以快速创建一个可以正常运行的 Spring 应用程序。而且这些极少的配置采用的是注解的方式,没有 XML。

总之呢,Spring Boot 是一个轻量级的框架,可以完成基于 Spring 的应用程序的大部分配置工作。

01、使用 Spring Initlallzr 创建 Spring Boot 项目

创建一个 Spring Boot 项目非常简单,通过 Spring Initlallzr(https://start.spring.io/)就可以了。(实际上,我也只是把这个网址扔给了小王。)


1)第一个选项一般选择 Maven(Java 后端项目首选),Gradle 在安卓项目中用的比较多。如果还不太了解 Maven,请查看我以前写的一篇文章:Maven 入门

2)第二个选项一般选择 Java。

3)第三个选项默认为 2.2.2,Spring Boot 目前最稳定的版本。

4)第四个选项填上项目的路径和名称。

5)第五个选项,我们选择 Spring Web 和 Spring Boot Actuator,表明该项目是一个 Web 项目;Actuator 是 Spring Boot 提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的 Spring beans 以及一些环境属性等。

选项选择完后,就可以点击【Generate】按钮生成一个初始化的 Spring Boot 项目了。生成的是一个压缩包,导入到 IDE 的时候需要先解压。

02、把 Spring Boot 项目导入 IDEA

最近迷上了 IDEA,所以暂时就不再使用 Eclipse 了。如果实在是不习惯 IDEA,可以选择 Spring 自己的 IDE——STS,基于 Eclipse 的。


PS:导入的过程就省略了,请选择 Maven 就对了。

等待 Maven 把所有的依赖包下载完。


项目的目录结构图如下所示。


1)HelloSpringBootApplication 为项目的入口,带有 main() 方法。我们知道,传统的 Web 项目通常需要放到 Tomcat 等容器下面启动运行,而 main() 方法则预示着该项目可以作为一个 jar 包直接运行——因为 Spring Boot 已经内置了 Tomcat。

2)大家一定对 @SpringBootApplication 注解非常好奇,它的源码大致如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

从这些注解中,我们大致可以窥探出,Spring Boot 项目使用了大量的注解取代了以往繁琐的 xml 配置。

03、编辑 Spring Boot 项目

来看下面这段代码。

@SpringBootApplication
@RestController
public class HelloSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloSpringBootApplication.class, args);
    }

    @RequestMapping("hello")
    public String hello() {
        return "Hello World";
    }
}

1)@RestController 注解相当于 @ResponseBody@Controller,意味着请求返回的对象可以直接以 JSON 的格式回显。

2)hello() 方法非常简单,返回一个字符串“Hello World”。@RequestMapping 表明这个方法是一个请求映射。

04、运行 Spring Boot 项目

接下来,我们直接运行 HelloSpringBootApplication 类,这样一个 Spring Boot 项目就启动成功了。


默认端口为 8080。

这时候,可以直接在 IDEA 的 Terminal 面板中测试该项目是否启动成功。


命令行为 curl http://localhost:8080/hello。之所以不需要项目路径 helloSpringBoot,是因为默认启动的时候相当于是一个 ROOT 级别的,所以不需要根目录。

curl 是一个常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)和 URL 的合体。curl 的功能非常强大,命令行参数多达几十种。如果运用熟练的话,完全可以取代 Postman。


05、jar 形式运行 Spring Boot 项目

打开 pom.xml,我们可以看到如下内容:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

这意味着我们可以通过 maven 命令 mvn clean package 将 Spring Boot 项目打包成 jar 文件。


也可以加上参数用于跳过打包时候的测试:mvn clean package -Dmaven.test.skip

稍等片刻,就可以在 target 目录下看到对应的 jar 包。该 jar 包比起传统的 war 包更具有优势,因为不需要再单独开一个容器来跑项目了,Spring Boot 内置过了。原生的 jar 文件(.jar.original)只有不到 3 kb,非常小,因为没几行代码,但打包后 .jar 文件有 19 M,这说明 Spring Boot 帮我们做了很多肉眼看不到的工作。


直接使用 java -jar helloSpringBoot-0.0.1-SNAPSHOT.jar 命令运行该 jar 包,同样可以看到 Tomcat 的启动信息。


这次,我们使用浏览器来访问一下。


也是 OK 的,这说明我们的第一个 Spring Boot 程序跑起来了。快给自己点个赞。


06、鸣谢

好了,亲爱的读者朋友们,答应小王的文章终于写完了。能看到这里的都是最优秀的程序员,升职加薪就是你了

大清朝早亡了,还没有入门 Spring Boot?的更多相关文章

  1. Spring Boot 学习方法论-如何正确的入门 Spring Boot

    想要入门 Spring Boot,那么什么样的教程是符合初学者学习的(没有太多的Java基础但有一些程序基础或者软件编程知识). 这恰好能够勾出很多问题,比如是文章图文教程适合还是视频教程适合零基础初 ...

  2. spring boot + vue + element-ui全栈开发入门——spring boot后端开发

    前言 本文讲解作为后端的spring boot项目开发流程,如果您还不会配置spring boot环境,就请点击<玩转spring boot——快速开始>,如果您对spring boot还 ...

  3. .NET程序员如何快入门Spring Boot

    本篇文章将教你作为一个.NET程序员如何快入门Spring Boot.你不需要用Eclipse,也不需要用IDEA.已经习惯了VS,其他的IDE-- 但不得不说VS Code很厉害,一用就喜欢.微软给 ...

  4. 扩展、接管MVC都不会,还说会Spring Boot?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管MVC?[不推荐] 为 ...

  5. 扩展、接管MVC都不会,还会用Spring Boot?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管MVC?[不推荐] 为 ...

  6. activeMQ入门+spring boot整合activeMQ

    最近想要学习MOM(消息中间件:Message Oriented Middleware),就从比较基础的activeMQ学起,rabbitMQ.zeroMQ.rocketMQ.Kafka等后续再去学习 ...

  7. Spring Boot 入门教程 | 图文讲解

    目录 一.Spring Boot 是什么 二.为什么要使用 Spring Boot 三.快速入门 3.1 创建 Spring Boot 项目 3.2 项目结构 3.3 引入 Web 依赖 3.4 编写 ...

  8. 161103、Spring Boot 入门

    Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验 ...

  9. spring boot + vue + element-ui全栈开发入门——开篇

    最近经常看到很多java程序员朋友还在使用Spring 3.x,Spring MVC(struts),JSP.jQuery等这样传统技术.其实,我并不认为这些传统技术不好,而我想表达的是,技术的新旧程 ...

随机推荐

  1. MyBatis配置项--配置环境(environments)--数据源(dataSource)

    数据源(dataSource) dataSource元素使用标准的JDBC数据源接口来配置JDBC连接对象的资源. ·许多MyBatis的应用程序会按示例中的例子来配置数据源.虽然是可选的,但为了使用 ...

  2. mac OS 安装 Subversion JavaHL 客户端

    JavaHL原来官网  http://subclipse.tigris.org/wiki/JavaHL 目前已经全部转移到github 官方说明很详细 https://github.com/subcl ...

  3. 《数据分析实战:基于EXCEL和SPSS系列工具的实践》一1.4 数据分析的流程

    本节书摘来华章计算机<数据分析实战:基于EXCEL和SPSS系列工具的实践>一书中的第1章 ,第1.4节,纪贺元 著 更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  4. VS中的生成和重新生成的区别

    2019独角兽企业重金招聘Python工程师标准>>> 生成 在上次编译的基础上,只对改动过的文件重新生成,没有改动过的文件不会重新生成. 重新生成 对所有的文件都重新生成.如果引用 ...

  5. 数学--数论--HDU1222 狼和兔子(最大公约数)

    问题描述 有一座周围有n个洞的小山.孔从0到n-1有符号. 兔子必须藏在其中一个洞中.狼以逆时针方向搜索兔子.他第一个进入的洞是一个用0签名的洞.然后,他将每m个洞进入一个洞.例如,m = 2和n = ...

  6. CodeForces - 1058A. In Search of an Easy Problem

    这题,全零是esay有1是hard,真难呀. #include<bits/stdc++.h> using namespace std; int main(){ int n,i,x,flag ...

  7. 经典卷积神经网络算法(2):AlexNet

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  8. springmvc与struts2执行流程比较

    之前写过一篇struts2的执行流程的文章了,这里对struts2的流程就不做过多的分析,这篇文章主要分析spring-mvc的执行流程以 及struts2与spring-mvc的差别. 1.stru ...

  9. react——key值的理解

    key不是给开发者使用的,是给react在diff算法中使用的,diff算法会比较新旧虚拟dom,并且是同层比较,当同一层中有多个元素的时候,会比较这一层的key值, 如果key相同,属性改变积极更新 ...

  10. search(10)- elastic4s-multi_match:多字段全文搜索

    在全文搜索中我们常常会在多个字段中匹配同一个查询条件或者在不同的字段中匹配不同的条件.比如下面这个例子: GET /books/_search { "query": { " ...