点击蓝色“程序猿DD”关注我哟

来源:http://t./


《Star最多的Spring Boot教程继续更新了》

牛皮吹过了!

Git仓库和博客专题页也改版完成!

是时候开始正式更新啦!

简介

在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用!

Spring Boot让我们的Spring应用变的更轻量化。我们不必像以前那样繁琐的构建项目、打包应用、部署到Tomcat等应用服务器中来运行我们的业务服务。通过Spring Boot实现的服务,只需要依靠一个Java类,把它打包成jar,并通过 java-jar命令就可以运行起来。这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。

总结一下Spring Boot的主要优点:

  • 为所有Spring开发者更快的入门

  • 开箱即用,提供各种默认配置来简化项目配置

  • 内嵌式容器简化Web项目

  • 没有冗余代码生成和XML配置的要求

快速入门

本文我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。

创建基础项目

Spring官方提供了非常方便的工具Spring Initializr来帮助我们创建Spring Boot应用。

使用Spring Initializr页面创建

第一步:访问Spring Initializr: https://start.spring.io/

如图所示,几个选项说明:

  • Project:使用什么构建工具,Maven还是Gradle;本教程将采用大部分Java人员都熟悉的Maven,以方便更多读者入门学习。

  • Language:使用什么编程语言,Java、Kotlin还是Groovy;本教程将采用Java为主编写,以方便更多读者入门学习。

  • Spring Boot:选用的Spring Boot版本;这里将使用当前最新的 2.1.3版本。

  • Project Metadata:项目的元数据;其实就是Maven项目的基本元素,点开More options可以看到更多设置,根据自己组织的情况输入相关数据,比如: 

  • Dependencies:选择要加入的Spring Boot组件;本文将实现一个Http接口,所以可以选择Web组件,只需要输入Web,页面会自动联想显示匹配的可选组件:  点击”+“之后,就如下图所示: 

第二步:点击”Generate Project“按钮生成项目;此时浏览器会下载一个与上面 Artifact名称一样的压缩包。

第三步:解压项目包,并用编译器以Maven项目导入,以IntelliJ IDEA为例:

  • 菜单中选择:File –> New –> Project from Existing Sources... 

  • 选择解压后的项目文件夹,点击OK

  • 点击:Import project from external model,并选择Maven,点击Next到底为止。

  • 若你的环境有多个版本的JDK,注意到选择Java SDK的时候请选择Java 8(具体根据你在第一步中选择的Java版本为准)

由于我们后续会有很多样例工程,您也可以像我们样例仓库那样,用一个基础仓库,每篇文章的样例以模块的方式保存,具体形式可见文末的案例仓库。

使用IntelliJ IDEA创建

如果是使用IntelliJ IDEA来写Java程序的话,那么还可以直接在编译器中创建Spring Boot应用。

第一步:菜单栏中选择:File => New => Project..,我们可以看到如下图所示的创建功能窗口。其中Initial Service Url指向的地址就是Spring官方提供的Spring Initializr工具地址,所以这里创建的工程实际上也是基于它的Web工具来实现的。

第二步:点击Next,等待片刻后,我们可以看到如下图所示的工程信息窗口:其实内容就跟我们用Web版的Spring Initializr是一模一样的,跟之前在页面上一样填写即可。

第三步:继续点击Next,进入选择Spring Boot版本和依赖管理的窗口:在这里值的我们关注的是,它不仅包含了Spring Boot Starter POMs中的各个依赖,还包含了Spring Cloud的各种依赖。

第四步:点击Next,进入最后关于工程物理存储的一些细节。最后,点击Finish就能完成工程的构建了。

Intellij中的Spring Initializr虽然还是基于官方Web实现,但是通过工具来进行调用并直接将结果构建到我们的本地文件系统中,让整个构建流程变得更加顺畅,还没有体验过此功能的Spring Boot/Cloud爱好者们不妨可以尝试一下这种不同的构建方式。

项目结构解析

通过上面步骤完成了基础项目的创建。如上图所示,Spring Boot的基础结构共三个文件(具体路径根据用户生成项目时填写的Group所有差异):

  • src/main/java下的程序入口: Chapter11Application

  • src/main/resources下的配置文件: application.properties

  • src/test/下的测试入口: Chapter11ApplicationTests

生成的 Chapter11ApplicationChapter11ApplicationTests类都可以直接运行来启动当前创建的项目,由于目前该项目未配合任何数据访问或Web模块,程序会在加载完Spring之后结束运行。

项目依赖解析

打开 pom.xml,一起来看看Spring Boot项目的依赖:

  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. <parent>

  6. <groupId>org.springframework.boot</groupId>

  7. <artifactId>spring-boot-starter-parent</artifactId>

  8. <version>2.1.3.RELEASE</version>

  9. <relativePath/> <!-- lookup parent from repository -->

  10. </parent>

  11. <groupId>com.didispace</groupId>

  12. <artifactId>chapter1-1</artifactId>

  13. <version>0.0.1-SNAPSHOT</version>

  14. <name>chapter1-1</name>

  15. <description>Demo project for Spring Boot</description>

  16. <properties>

  17. <java.version>1.8</java.version>

  18. </properties>

  19. <dependencies>

  20. <dependency>

  21. <groupId>org.springframework.boot</groupId>

  22. <artifactId>spring-boot-starter-web</artifactId>

  23. </dependency>

  24. <dependency>

  25. <groupId>org.springframework.boot</groupId>

  26. <artifactId>spring-boot-starter-test</artifactId>

  27. <scope>test</scope>

  28. </dependency>

  29. </dependencies>

  30. <build>

  31. <plugins>

  32. <plugin>

  33. <groupId>org.springframework.boot</groupId>

  34. <artifactId>spring-boot-maven-plugin</artifactId>

  35. </plugin>

  36. </plugins>

  37. </build>

  38. </project>

如上所示,主要有四个部分:

  • 项目元数据:创建时候输入的Project Metadata部分,也就是Maven项目的基本元素,包括:groupId、artifactId、version、name、description等

  • parent:继承 spring-boot-starter-parent的依赖管理,控制版本与打包等内容

  • dependencies:项目具体依赖,这里包含了 spring-boot-starter-web用于实现HTTP接口(该依赖中包含了Spring MVC); spring-boot-starter-test用于编写单元测试的依赖包。更多功能模块的使用我们将在后面的教程中逐步展开。

  • build:构建配置部分。默认使用了 spring-boot-maven-plugin,配合 spring-boot-starter-parent就可以把Spring Boot应用打包成JAR来直接运行。

编写一个HTTP接口

  • 创建package命名为com.didispace.web(根据实际情况修改)

  • 创建 HelloController类,内容如下:

  1. @RestController

  2. public class HelloController {

  3. @RequestMapping("/hello")

  4. public String index() {

  5. return "Hello World";

  6. }

  7. }

  • 启动主程序,使用PostMan等工具发起请求: http://localhost:8080/hello,可以看到页面返回:Hello World

编写单元测试用例

打开的 src/test/下的测试入口 Chapter11ApplicationTests类。下面编写一个简单的单元测试来模拟http请求,具体如下:

  1. import static org.hamcrest.Matchers.equalTo;

  2. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

  3. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

  4. @RunWith(SpringRunner.class)

  5. @SpringBootTest

  6. public class Chapter11ApplicationTests {

  7. private MockMvc mvc;

  8. @Before

  9. public void setUp() throws Exception {

  10. mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();

  11. }

  12. @Test

  13. public void getHello() throws Exception {

  14. mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))

  15. .andExpect(status().isOk())

  16. .andExpect(content().string(equalTo("Hello World")));

  17. }

  18. }

使用 MockServletContext来构建一个空的 WebApplicationContext,这样我们创建的 HelloController就可以在 @Before函数中创建并传递到 MockMvcBuilders.standaloneSetup()函数中。

注意引入下面内容,让status、content、equalTo函数可用

  1. import static org.hamcrest.Matchers.equalTo;

  2. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

  3. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

至此已完成目标,通过Maven构建了一个空白Spring Boot项目,再通过引入web模块实现了一个简单的请求处理。

代码示例

本文的相关例子可以查看下面仓库中的 chapter1-1目录:

  • Github:https://github.com/dyc87112/SpringBoot-Learning/tree/2.x

  • Gitee:https://gitee.com/didispace/SpringBoot-Learning/tree/2.x

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!


重磅推荐

我一直都有推荐小马哥的Spring Boot以及Spring Cloud讲座给大家,为什么没有推荐别人的呢?主要还是比较认可小马哥的解读,不像其他课程那样千篇一律,缺少自己的思考。

这次小马哥的书终于出版预售了,我觉得必须要给大推荐:《Spring Boot编程思想》,大家可以直接长按下图,识别二维码购买。


推荐阅读

  • 成功离我们有多远?

  • 3台廉价服务器支撑200万TPS的消息中间件

  • 会写代码是你创业路上的包袱吗?

  • 一文学会Maven的版本发布

  • 10个你值得收藏的牛逼开源后台控制面板

号外:最近整理了之前编写的一系列内容做成了PDF,关注我并回复相应口令获取:

001 :领取《Spring Boot基础教程》

002 :领取《Spring Cloud基础教程》


2019

与大家聊聊技术人的斜杠生活

点个“好看”支持一下鸭

点鸭点鸭点鸭

↓↓↓

Spring Boot 2.x基础教程:快速入门相关推荐

  1. Spring Boot 2.x基础教程:使用Elastic Job实现定时任务

    上一篇,我们介绍了如何使用Spring Boot自带的@Scheduled注解实现定时任务(https://blog.didispace.com/spring-boot-learning-2-7-1/ ...

  2. Spring Boot 2.x基础教程:使用国产数据库连接池Druid

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

  3. Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/ ...

  4. Spring Boot 2.x基础教程:Swagger静态API文档的生成

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  5. Spring Boot 2.x基础教程:JSR-303实现请求参数校验

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  6. 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行

    http://springboot.zimug.com/1233100   文档 http://www.zimug.com/page/5     字母哥个人博客 11111 第一章 spring bo ...

  7. Spring Boot 2.x基础教程:Swagger静态文档的生成

    前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了.如果您还不熟悉这块,可以先阅读: Spring Boo ...

  8. Spring Boot 2.x基础教程:使用LDAP来管理用户与组织数据

    很多时候,我们在做公司系统或产品时,都需要自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时 ...

  9. Spring Boot 2.x基础教程:使用Redis的发布订阅功能

    通过前面一篇集中式缓存的使用教程,我们已经了解了Redis的核心功能:作为K.V存储的高性能缓存. 接下来我们会分几篇来继续讲讲Redis的一些其他强大用法!如果你对此感兴趣,一定要关注收藏我哦! 发 ...

  10. Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

最新文章

  1. Spring总结之SpringMvc下
  2. 网站收录的提升离不开“方法”和“坚持”
  3. 数据结构-栈详解(类C语言版)
  4. 计算机网络与云计算研究背景,基于云计算背景下的计算机网络安全研究
  5. 栈和队列(python代码)
  6. asp.net core源码飘香:Configuration组件
  7. SonarQube结合IDEA实现代码检测
  8. GB-T 16260.1-2006 软件工程 产品质量 第1部分:质量模型
  9. c语言编程输出年月日,C语言程序设计: 输入年月日 然后输出是星期几
  10. weblogic 文件打开数_Weblogic任意文件读取和任意文件上传
  11. javascript数据结构与算法--二叉树遍历(中序)
  12. Polymer元素和AngularJS指令有什么区别?
  13. 利用CSS3 animation绘制动态卡通人物,无需使用JS代码
  14. Laravel核心概念:服务容器(ServiceContainer),服务提供者(Service Provider),门面(Facade),契约(Contracts)
  15. 基于WinPcap的网络流量在线分析系统的设计与实现
  16. 加密解密工具 之 恩尼格玛密码机密码
  17. 计算机主板运算放大器电路,常用运算放大器电路图 (全集)
  18. 让你的 Mac 用上最美的屏保,Aerial 使用教程
  19. 超简单!为图片和 PDF 上去掉水印
  20. python笔迹识别_CVPR 2019笔迹识别论文:逆鉴别网络+八路Attention

热门文章

  1. linux 查看网络连接数
  2. golang sql查询获取结果集个数
  3. c/c++ 避免重复包含 pragma once 和 #ifndef 的区别
  4. docker逃逸 从Play-with-Docker容器逃逸到Docker主机
  5. 编写OD插件将IDA中分析出来的函数名导入到OD中
  6. 单链表快速排序算法实现
  7. Java中的DeskTop类
  8. Ubuntu安装google拼音输入法
  9. php代码注释处理类库,php代码注释
  10. amazon mws api 获取所有产品_Amazon’s Choice是什么?Amazon's Choice标签全解读