引用百科的一句话来说,SpringBoot是一款全新框架,设计目的是为了简化新Spring应用的初始搭建以及开发过程。

怎么讲呢,首先要明确的就是SpringBoot不是替代Spring的一种解决方案,而是整合Spring技术资源的方案,它已经帮你集成了大量的内容,以至于你可以“开箱即用”,因为它需要的搭建步骤和配置文件真的很少很少。

这里直接从Spring官方的Demo入手,带你领略一下SpringBoot的魅力所在。


1、Demo说明

我们接下来将要使用SpringBoot来创建一个 RESTful 风格的Web服务应用,当然是Hello World级别的入门程序。

当我们访问 http://localhost:8080/greeting 时,服务器会返回JSON格式的数据,如 {"id":1, "content":"Hello, World!"};

如果我们对接口增加参数name时,如 http://localhost:8080/greeting?name=zhangsan ,则返回的数据为 {"id":1, "content":"Hello, zhangsan!"}


2、配置环境说明

  • JDK 1.8+
  • Maven 3.2+

以上是SpringBoot 从2.0版本开始的最低要求了,如果你的JDK版本较低,那么获取你也只能使用低版本的SpringBoot,本篇中的Demo将会基于SpringBoot-version2.0.3。


3、SpringBoot:Hello World

3.1 配置pom

新建一个Maven项目,然后在pom.xml中引入SpringBoot相关的配置,官方Demo中给出配置如下(看似配置很复杂,其实我们并用不了这么多,现在只管复制着用就好了,在后面会说明,实际上必要的pom配置也就三部分):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId>
<artifactId>gs-rest-service</artifactId>
<version>0.1.0</version> <!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent> <!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <properties>
<java.version>1.8</java.version>
</properties> <!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> <!-- Add Spring repositories -->
<!-- (you don't need this if you are using a .RELEASE version) -->
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
63
 
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4
    <modelVersion>4.0.0</modelVersion>
5

6
    <groupId>org.springframework</groupId>
7
    <artifactId>gs-rest-service</artifactId>
8
    <version>0.1.0</version>
9

10
    <!-- Inherit defaults from Spring Boot -->
11
    <parent>
12
        <groupId>org.springframework.boot</groupId>
13
        <artifactId>spring-boot-starter-parent</artifactId>
14
        <version>2.0.3.RELEASE</version>
15
    </parent>
16

17
    <!-- Add typical dependencies for a web application -->
18
    <dependencies>
19
        <dependency>
20
            <groupId>org.springframework.boot</groupId>
21
            <artifactId>spring-boot-starter-web</artifactId>
22
        </dependency>
23
        <dependency>
24
            <groupId>org.springframework.boot</groupId>
25
            <artifactId>spring-boot-starter-test</artifactId>
26
            <scope>test</scope>
27
        </dependency>
28
        <dependency>
29
            <groupId>com.jayway.jsonpath</groupId>
30
            <artifactId>json-path</artifactId>
31
            <scope>test</scope>
32
        </dependency>
33
    </dependencies>
34

35
    <properties>
36
        <java.version>1.8</java.version>
37
    </properties>
38

39
    <!-- Package as an executable jar -->
40
    <build>
41
        <plugins>
42
            <plugin>
43
                <groupId>org.springframework.boot</groupId>
44
                <artifactId>spring-boot-maven-plugin</artifactId>
45
            </plugin>
46
        </plugins>
47
    </build>
48

49
    <!-- Add Spring repositories -->
50
    <!-- (you don't need this if you are using a .RELEASE version) -->
51
    <repositories>
52
        <repository>
53
            <id>spring-releases</id>
54
            <url>https://repo.spring.io/libs-release</url>
55
        </repository>
56
    </repositories>
57
    <pluginRepositories>
58
        <pluginRepository>
59
            <id>spring-releases</id>
60
            <url>https://repo.spring.io/libs-release</url>
61
        </pluginRepository>
62
    </pluginRepositories>
63
</project>

3.2 新建实体类用以表示返回对象

JSON格式要求为 {"id":1, "content":"Hello, World!"} ,则对应的实体类如下:
public class Greeting {
private final long id;
private final String content; public long getId() {
return id;
} public String getContent() {
return content;
} public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
}
17
 
1
public class Greeting {
2
    private final long id;
3
    private final String content;
4

5
    public long getId() {
6
        return id;
7
    }
8

9
    public String getContent() {
10
        return content;
11
    }
12

13
    public Greeting(long id, String content) {
14
        this.id = id;
15
        this.content = content;
16
    }
17
}

3.3 新建Controller

@RestController
public class GreetingController { private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
} }
12
 
1
@RestController
2
public class GreetingController {
3

4
    private static final String template = "Hello, %s!";
5
    private final AtomicLong counter = new AtomicLong();
6

7
    @RequestMapping("/greeting")
8
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
9
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
10
    }
11

12
}
  • @RestController 即表示了 @Controller 和 @ResponseBody 的整合
  • @RequestMapping 用来映射url请求到该方法
  • @RequestParam 用来绑定请求中的参数,其中value为参数名称,defaultValue为参数默认值

3.4 新建执行类

常规的方式我们往往将资源打为war包然后部署在服务器下,而SpringBoot则默认采用了打为jar包并执行main()函数的方法,我们新建类如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6
 
1
@SpringBootApplication
2
public class Application {
3
    public static void main(String[] args) {
4
        SpringApplication.run(Application.class, args);
5
    }
6
}

3.5 运行main函数

是的,接下来你只需要运行main函数就可以了:


你甚至可以将工程打成可执行的jar包(Maven,先clean,再package打包):

然后通过 java -jar 执行jar包的主程序,效果也是一样的:



服务器哪来的,我明明只是执行了一个main函数而已
  • SpringBoot内置了三种Servlet容器:Tomcat、Jetty、Undertow
  • 默认使用的是Tomcat

SpringBoot怎么知道我要的是MVC模式的web应用
  • 别忘了我们在pom中配置了所谓的“starter”
  • SpringBoot提供各种starter,其实就是很多Spring包的集合,不过Spring替我们整合起来了


4、Demo部分补充说明

4.1 关于pom配置

对于SpringBoot的pom配置来说,官方也进行了详细的说明。可以看出该Demo中其实必要的留下如下三部分即可:
<!-- Inherit defaults from Spring Boot -->
<!-- springBoot 核心包 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.BUILD-SNAPSHOT</version>
</parent> <!-- Add typical dependencies for a web application -->
<!-- 如果搭建的是web应用则增加典型的依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> <!-- Package as an executable jar -->
<!-- 将springBoot打包为jar包的插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
27
 
1
<!-- Inherit defaults from Spring Boot -->
2
<!-- springBoot 核心包 -->
3
<parent>
4
    <groupId>org.springframework.boot</groupId>
5
    <artifactId>spring-boot-starter-parent</artifactId>
6
    <version>2.0.4.BUILD-SNAPSHOT</version>
7
</parent>
8

9
<!-- Add typical dependencies for a web application -->
10
<!-- 如果搭建的是web应用则增加典型的依赖 -->
11
<dependencies>
12
    <dependency>
13
        <groupId>org.springframework.boot</groupId>
14
        <artifactId>spring-boot-starter-web</artifactId>
15
    </dependency>
16
</dependencies>
17

18
<!-- Package as an executable jar -->
19
<!-- 将springBoot打包为jar包的插件 -->
20
<build>
21
    <plugins>
22
        <plugin>
23
            <groupId>org.springframework.boot</groupId>
24
            <artifactId>spring-boot-maven-plugin</artifactId>
25
        </plugin>
26
    </plugins>
27
</build>

4.2 关于starter

依赖的集合,官方的说明(13.5 Starters)就很贴切了:The starters contain a lot of the dependencies that you need to get a project up and running quickly and with a consistent, supported set of managed transitive dependencies.



4.3 关于默认配置变更

内置的Tomcat默认端口是8080,当然是可以修改的,抛砖引玉,本篇不做详述:

4.4 关于部署war包

SpringBoot默认是按照jar包执行,实际上也是可以打包成为war包,单独放在服务器下运行。同样,此处不展开,参考链接即可:


5、其他参考链接


[01] 初识SpringBoot:Hello World的更多相关文章

  1. 初识springboot(傻瓜式教程)

    初识springboot(傻瓜式教程) 项目所需的版本 IDEA 2018 maven 3.x jdk-1.8 IDEA创建spring-boot项目(maven方法) 1.创建一个maven工程 点 ...

  2. TensorFlow --- 01初识

    由于博客园对Markdown支持不够友好,阅读此文请前往云栖社区:TensorFlow --- 01初识

  3. day24 01 初识继承

    day24 01 初识继承 面向对象的三大特性:继承,多态,封装 一.继承的概念 继承:是一种创建新类的方式,新建的类可以继承一个或者多个父类,父类又可称基类或超类,新建的类称为派生类或者子类 cla ...

  4. day22 01 初识面向对象----简单的人狗大战小游戏

    day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战   怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...

  5. springboot(一).初识springboot以及基本项目搭建

    初识springboot 以及基本项目搭建 由于新的项目需要搭建后台框架,之前的springmvc架构也使用多次,在我印象中springboot的微服务架构更轻量级更容易搭建,所以想去试试spring ...

  6. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  7. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象

    079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...

  9. 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类

    078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...

随机推荐

  1. Docker 搭建 ELK 收集并展示 tomcat 日志

    架构 前端展示 --> 索引搜索 <-- 日志提取及过滤 --> 日志缓存 <-- 日志收集 Kibana --> Elastash <-- Logstash -- ...

  2. Centos 7.x 安装 Docker-ce

    Centos 下安装 Docker-ce CentOS 7.0, CentOS 7.2: cat > /etc/yum.repos.d/docker-main.repo << -'E ...

  3. 纯小白入手 vue3.0 CLI - 3.2 - 路由的初级使用

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  4. pip install 报错

    问题描述,在使用pip安装django相关软件包时,提示错误如下: [root@test4 install]# pip install django==1.6 Downloading/unpackin ...

  5. solr搜索引擎配置使用mongodb作为数据源

    环境说明: 操作系统:由于是使用的docker直接拉取的镜像部署的,系统是LINUX环境 mongodb: 4.0.3 solr: 7.5.0 python: 3.5 配置mongodb 1.拉取mo ...

  6. [SequenceFile_3] MapFile

    0. 说明 MapFile 介绍 && 测试 1. 介绍 对 MapFile 的介绍如下: MapFile 是带有索引的 SequenceFile MapFile 是排序的 Seque ...

  7. [Compression] Hadoop 压缩

    0. 说明 Hadoop 压缩介绍 && 压缩格式总结 && 压缩编解码器测试 1. 介绍 [文件压缩的好处] 文件压缩的好处如下: 减少存储文件所需要的磁盘空间 加速 ...

  8. windows系统安装python3.6.3和python3.7.0

    一.装备好从官网下载的python软件包(3.6.3和3.7.0) 二.先安装python3.6.3 1.运行python3.6.3文件 2.选择默认 3.下一步,等待安装 4.检查是否安装成功 ,安 ...

  9. ccf题库20170903--Json查询

    题目如下: 试题编号: - 试题名称: JSON查询 时间限制: .0s 内存限制: .0MB 问题描述: 问题描述 JSON (JavaScript Object Notation) 是一种轻量级的 ...

  10. vue的组件详解

    什么是组件 组件(Component)是 Vue.js 最强大的功能之一.(好比电脑中的每一个元件(键盘,鼠标,CPU),它是一个具有独立的逻辑和功能或界面,同时又能根据规定的接口规则进行互相融合,变 ...