SpringBoot 的第一次邂逅

前言

在介绍 SpringBoot 之前,我们首先要隆重介绍一下 Spring 框架。在上古时期,人们通常用 J2EE 那一套东西来开发企业级应用。笨重复杂的 EJB 的开发和部署让程序员们不胜其烦。其时 Spring 框架横空出世,通过依赖注入、AOP、事务管理等核心功能,几乎一统 Java 的企业级应用开发。经过十多年的发展,Spring 也从开始动作敏捷的妙龄少女慢慢变成了身材臃肿的中年大妈。随着功能越来越多,越来越强大,Spring 的配置的工作量也随之增大。长长的配置文件通常折磨得程序员们欲仙欲死。喜新厌旧的程序员们又开始看 Spring 不顺眼了。这次则是 SpringBoot 站出来,挽回了程序员们对 Spring 的宠爱。

SpringBoot 并不是一个全新的东西,他是基于 Spring 的。可以说
SpringBoot 的目的就是让程序员用最简单的方式来开发 Spring 应用的。SpringBoot 通过一种约定的编程模式,简化基于 Spring 的开发。尽量减少程序配置的工作。在 SpringBoot 的开发过程中,几乎看不到传统 Java Web 开发的的各种 XML 配置文件。有人说 Spring 基于注解的配置方式也可以做到没有 XML 文件配置,但是 SpringBoot 甚至于连 web.xml 文件都没有了,这就看出谁更狠了。而且 SpringBoot 开发的程序不再是一个 war 包的形式,放到一个类似 Tomcat 这样的 web 容器中运行,而是一个独立的 jar 包,直接通过 java -jar xxxxx.jar 的形式就可以运行。当然,SpringBoot 也支持 war 包运行的方式。

SpringBoot 除了 Spring 本身的优点外,还提供了一下几点特性:

  1. 他可以创建独立运行的基于 Spring 的应用。因为 SpringBoot 内嵌了 Tomcat、Jetty、Undertow 应用服务器,所以他不需要部署一个 war 文件到一个单独的应用服务器中来运行。
  2. 他简化了项目依赖的配置。SpringBoot 对我们在 Java Web 开发过程中的功能进行了分类和封装,通过提供了一些可选的 "starter" POMs 来简化 Maven 配置。
  3. 尽可能自动化Spring 的配置。SpringBoot 通过一些列的编程约定和注解来替代传统的 XML 配置方式。减少 Spring 开发过程中的配置工作量。让开发的配置变得更加简单。
  4. 产品级的应用监控。通过简单的引入对应的依赖,SpringBoot 就能自动的在产品中加入产品级的监控和管理的功能。包括健康检查、性能测量等。

总之,有了 SpringBoot ,我们能够更方便的开发、部署、监控 Spring 的应用程序了。

下面我们就用一个最简单的 Hello Word 来快速了解一下 SpringBoot 的强大之处。

创建工程

在 Intellij 中新建工程,在对话框中选择 Spring Initializr

选择项目类型

然后选择 "Next" 填写工程的基本信息

填写项目信息

继续选择 "Next" 选择工程要包含的 SpringBoot 支持的功能组件。如果你没有想好要哪些功能组件,这一步可以不用选,后面我们可以在 maven 的 pom 文件中自己添加。

选择功能组件

然后,一直选择 "Next" ,知道最后选择 "Finish" 完成工程的创建。 如果是第一次创建 SpringBoot工程,需要等待一段时间来完成从互联网下载相关依赖包的过程。

完成后,整个 SrpingBoot 初始的工程结构如下所示:

image.png

前一两天刚刚发布了 Spring Boot 2.0 的版本,所以现在默认的 SpringBoot 版本如红框部分所示为 2.0.0.REALEASE。

由于我们在创建的过程中,没有选择其他的功能组件,这里只有 spring-boot-starter 这一个核心的依赖。

SpringbootLearnApplication 是默认的系统启动类,application.properties 文件是系统默认的配置项配置文件。

其中 SpringbootLearnApplication 类是系统自动生成的,一个 SpringBootApplication 注解声明这是一个 SpringBoot 的应用。类只有一行代码 SpringApplication.run(SpringbootLearnApplication.class, args) 用来启动 SpringBoot 程序。

package com.yanggaochao.springboot.springbootlearn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootLearnApplication {

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

创建一个 Http Rest 服务

在我们的工作中,通常都是用 SpringBoot 来完成一个 Http Rest 服务。这属于 web 相关的功能,需要在 pom 文件中加入下面的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

配置 SpringBoot

一个 Http 服务需要配置 SpringBoot 程序运行服务的端口和上下文路径。这些信息默认是通过 properties 的方式配置在 applications.properties 文件中。如下所示

server.port=3030
server.servlet.context-path=/learn

这里将 SpringBoot 的服务地址配置为 3030,服务的上下文路径配置为 /learn。

注意:这个 server.servlet.context-path 这个配置是对应了 SpringBoot1.x 版本中的 server.context-path

编写 Http Rest 接口 hello

  1. 新建一个类 com.yanggaochao.springboot.springbootlearn.web.HelloApi 来提供服务。
  2. 在类声明上增加一个 RestController 注解,声明这个类是一个 Http Rest 服务。
  3. 在类声明上增加一个 RequestMapping("/api/v1/hello") 的注解,用来声明这个 Rest 服务的地址前缀。
  4. 写一个sayHello 方法提供 say hello 服务。其中参数 name 前面的 PathVariable 注解用来声明这个参数从服务的 url 路径中获取。
  5. 在 sayHello 方法上增加一个 RequestMapping("/say/{name}") 声明这个方法的服务地址。实际地址是 (http|https)://ip:3030/learn/api/v1/hello/say/{name}。这里还应该指明请求服务的方法,如果不写就是默认值 GET 方法来请求。
package com.yanggaochao.springboot.springbootlearn.web;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 样例 Http Rest 服务
 *
 * @author 杨高超
 * @since 2018-03-06
 */

@RestController
@RequestMapping("/api/v1/hello")
public class HelloApi {
    @RequestMapping("/say/{name}")
    String sayHello(@PathVariable String name) {
        return "Hello," + name + "!";
    }
}

启动 SpringBoot 应用

SpringBoot 应用是通过 SpringbootLearnApplication 的 main 方法启动的。在 Intellij IDEA 中,在 main 方法体类点击鼠标右键,和普通 Java 应用一样,选择 Run 或者 Debug 都可以运行。

运行 SpringBoot

SpringBoot 启动后,首先打印 SpringBoot 应用的 banner 信息,然后是启动日志。


SpringBoot 启动

验证

GET 方法的 Http Rest 请求可以直接在浏览器地址栏上请求。我们在 Chrome 地址栏输入 http://localhost:3030/learn/api/v1/hello/say/yanggch , 则会在浏览器中显示 Hello,yanggch!

请求结果

打包

maven 项目可以通过 maven 的 package 命令构建部署包。点击 IDEA 右侧的 Maven Project 标签打开如下界面,点击红框内容既完成部署包的生成。生成的目录是项目目录下的 target 目录下。SpringBoot 的部署包默认是一个独立的 elementary-0.0.1-SNAPSHOT.jar 文件。将所有相关的文件都包含到这个包中。


maven 构建

命令行运行

前面程序的运行是在 IDEA 工具里面运行的。实际部署中,SpringBoot 程序是通过命令行运行的。

进入 SpringBoot 构建的部署所在的目录,执行 java -jar elementary-0.0.1-SNAPSHOT.jar 命令就可以启动 SpringBoot 应用了。


命令行启动

后记

就这样,我们仅仅写了几行代码,设置了两个配置项,就实现了一个基本的 Http Rest 服务接口。是不是非常的快速和简单。对比一下采用传统的方法开发一个 Spring Http Rest 服务的步骤和 Srping Boot 开发的步骤就可以看出 SpringBoot 开发的便捷性了。而且 SpringBoot 还可以独立的运行。更厉害的是 SpringBoot 可以非常好的和流行的微服务框架 Spring Cloud 结合。可以说 SpringBoot 几乎是为微服务量身打造的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容