点击上方“芋道源码”,选择“设为星标”

做积极的人,而不是积极废人!

源码精品专栏

  • 原创 | Java 2019 超神之路,很肝~

  • 中文详细注释的开源项目

  • RPC 框架 Dubbo 源码解析

  • 网络应用框架 Netty 源码解析

  • 消息中间件 RocketMQ 源码解析

  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析

  • 作业调度中间件 Elastic-Job 源码解析

  • 分布式事务中间件 TCC-Transaction 源码解析

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码

摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/quick-start/ 「芋道源码」欢迎转载,保留摘要,谢谢!

  • 1. 概述

  • 2. 快速入门

  • 3. Spring Initializr

  • 4. IDEA x Spring Initializr

  • 666. 彩蛋


1. 概述

我们先来简单了解下 Spring Boot 是什么?其官方介绍自己如下:

FROM 《Spring 中文文档 —— Spring Boot 简介》

使用 Spring Boot 可以很容易地创建出能直接运行的独立的、生产级别的基于 Spring 的应用。 我们对 Spring 平台和第三方类库有自己的考虑,因此您可以从最基本的开始。大多数 Spring Boot 应用只需要很少的 Spring 配置。

您可以使用 Spring Boot 来创建一个可以使用 java -jar 命令来运行或者基于传统的 war 包部署的应用程序。我们还提供了一个用于运行 spring scripts 的命令行工具。

我们的主要目标是:

  • 为所有 Spring Boot 开发提供一个更快、更全面的入门体验。

  • 坚持自我虽好,但当需求出现偏离,您需要能迅速摆脱出来。

  • 提供大量非功能性特性相关项目(例如:内嵌服务器、安全、指标、健康检查、外部配置)。

  • 绝对没有代码生成,也不要求 XML 配置。

是不是看着有点懵逼?重点先理解是加粗的两句话。简单来说,通过使用 Spring Boot,我们无需再进行大量的 Spring 配置,只需要少量甚至零配置。

可能这么说还是有点抽象,我们直接来动手,奥利给,干就完事了!

2. 快速入门

本小节,我们搭建 Spring Boot 示例项目,并在其中使用 SpringMVC 来提供一个简单的 HTTP API。

在开始搭建示例项目之前,胖友需要先做好如下准备:

  • JDK8+

    友情提示:Spring Boot 2.X 版本,需要最低的 Java 版本是 8。

  • Maven

    本文希望胖友对 Maven 构建工具有过一定的了解。如果没有的话,可以看看《Maven最全教程,看了必懂》文章。

  • IDEA

    宇宙最强 Java 开发者工具,没有之一。

2.1 创建 Maven 项目

① 打开 IDEA,点击菜单 File -> New -> Project... 来创建项目。如下图所示:

② 选择 Maven 类型,点击「Next」按钮,进入下一步。输入 Maven 的 GroupIdArtifactId,如下图所示:

③ 点击「Next」按钮,继续进入下一步。如下图所示:

④ 点击「Finish」按钮,完成 Maven 项目的创建。此时项目如下图所示:

最终,我们的示例项目会如下图所示:

下面,我们逐步来看看。

2.2 引入依赖

pom.xml 文件中,引入相关依赖。

<?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>cn.iocoder</groupId><artifactId>demo01</artifactId><version>1.0-SNAPSHOT</version><!-- 从 Spring Boot 继承默认配置 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><!-- 实现对 SpringMVC 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
  • 引入 spring-boot-starter-parent 作为父 POM,从而继承其默认配置。

    友情提示:考虑到一般公司项目中都已经有自己的父 POM,可以参考文档修改。

  • 引入 spring-boot-starter-web 依赖,实现对 SpringMVC 的自动化配置。同时该依赖会自动帮我们引入 SpringMVC 等相关依赖。

2.3 配置文件

在 Spring Boot 项目中,约定通过 application.yaml 配置文件,进行 Spring Boot 自动配置的 Bean 的自定义。

resource 目录下,创建 application.yaml 配置文件。内容如下:

server:port: 8080 # 内嵌的 Tomcat 端口号。默认值为 8080。
  • 通过 server.port 配置项,设置稍后启动的内嵌 Tomcat 端口为 8080 端口。

友情提示:关于配置文件,后续胖友可以阅读《芋道 Spring Boot 配置文件入门》文章。

2.4 DemoController

创建 DemoController 类,提供一个简单的 HTTP API。代码如下:

@RestController
@RequestMapping("/demo")
public class DemoController {@GetMapping("/echo")public String echo() {return "echo";}}
  • 标准的 SpringMVC 使用示例,没有什么特别哈。

2.5 Application

创建 Application 类,提供 Spring Boot 应用的启动类。代码如下:

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
  • 在类上,添加 @SpringBootApplication 注解,声明是一个 Spring Boot 应用。通过该注解,可以带来 Spring Boot 自动配置等等功能。

  • #main(String[] args) 方法中,我们通过 SpringApplication#run(Class<?> primarySource, String... args) 方法,启动 Spring Boot 应用。

2.6 简单测试

① 执行 Application#main(String[] args) 方法,启动示例项目。

这里我们会发现,我们无需在部署 Web 项目到外部的 Tomcat 中,而是直接通过 Application#main(String[] args) 方法,就可以直接启动,非常方便。完全符合 Spring Boot 文档对自己的介绍:

使用 Spring Boot 可以很容易地创建出能直接运行的独立的、生产级别的基于 Spring 的应用。

② 此时,我们可以看到 IDEA 控制台输出 Spring Boot 启动日志如下:

// Spring Boot 自带 Banner.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.2.2.RELEASE)// 启动 Java 进程使用的 PID 进程号
2020-02-08 15:38:25.724  INFO 10645 --- [           main] cn.iocoder.demo01.Application            : Starting Application on MacBook-Pro-8 with PID 10645 (/Users/yunai/Java/demo01/target/classes started by yunai in /Users/yunai/Java/demo01)
// Spring Boot Profile 机制,暂时可以忽略
2020-02-08 15:38:25.727  INFO 10645 --- [           main] cn.iocoder.demo01.Application            : No active profile set, falling back to default profiles: default
// 内嵌 Tomcat 启动
2020-02-08 15:38:26.503  INFO 10645 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-02-08 15:38:26.510  INFO 10645 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-02-08 15:38:26.510  INFO 10645 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
2020-02-08 15:38:26.561  INFO 10645 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-02-08 15:38:26.561  INFO 10645 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 799 ms
2020-02-08 15:38:26.693  INFO 10645 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-02-08 15:38:26.839  INFO 10645 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-02-08 15:38:26.842  INFO 10645 --- [           main] cn.iocoder.demo01.Application            : Started Application in 1.396 seconds (JVM running for 1.955)
// SpringMVC DispatcherServlet 初始化
2020-02-08 15:38:44.992  INFO 10645 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-02-08 15:38:44.992  INFO 10645 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-02-08 15:38:44.996  INFO 10645 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms
// ... 暂时可以忽略
2020-02-08 15:39:37.113  INFO 10645 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
  • 注意,以 // 开头的每一行,是艿艿添加的注释哟,胖友仔细看看。

有木有发现,Logger 日志组件,Spring Boot 都已经帮我们自动配置好啦。是不是很舒服~

③ 使用浏览器,访问 http://127.0.0.1:8080/demo/echo 接口,返回结果为 "echo"

这说明,SpringMVC 框架,也被 Spring Boot 自动配置完成。同时,使用的是内嵌的 Tomcat 服务器。


至此,我们已经进行了 Spring Boot 的快速入门。后续,胖友可以阅读《芋道 Spring Boot SpringMVC 入门》文章,进一步的学习。

另外,Spring Boot 自动配置是个很神器,胖友一定一定一定要去阅读《芋道 Spring Boot 自动配置原理》。知其然,知其所以然。千万不要只停留在入门或者使用的层级上,而是要不断死磕。

3. Spring Initializr

我们可以通过使用 Spring Initializr 工具,快速生成一个 Spring Boot 项目。如下图所示:

下面,我们就来使用 Spring Initializr 来搭建一个示例。

3.1 生成项目

① 使用浏览器,打开 https://start.spring.io/ 地址,配置如下图所示:

② 点击「Explore」按钮,浏览生成的项目。如下图所示:

还是蛮酷炫的,可以在线直接浏览即将生成的项目。

③ 关闭弹窗,然后点击「Generate」按钮,生成项目,会以 .zip 压缩包的方式进行下载。

3.2 导入 IDEA

① 解压 .zip 压缩包,用于稍后导入 IDEA 中。

② 打开 IDEA,点击菜单 File -> Project from Existing Sources... 来导入项目。如下图所示:导入项目

③ 然后 Maven 类型,然后不断点击「Next」按钮,最终完成项目的导入。此时项目如下图所示:项目结构

友情提示:如果胖友选择的 Spring Boot 版本比较新,可能需要耐心等待下,IDEA 需要等待 Maven 下载相关依赖。

  • resource/static 目录,放静态资源。例如说,js、css、图片等等。

  • resource/templates 目录,放页面模板。例如说,thymeleaf、freemarker 等等。

下面,我们逐步来看看。

3.3 引入依赖

pom.xml 文件中,引入相关依赖。

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>cn.iocoder</groupId><artifactId>demo02</artifactId><version>0.0.1-SNAPSHOT</version><name>demo02</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><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><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

我们只说差异的地方哈:

  • 设置 <java.version> 属性为 1.8,表示使用 JDK8。

  • 引入 spring-boot-starter-test 依赖,实现对 Test 的自动化配置。

    友情提示:对在 Spring Boot 进行单元测试感兴趣的胖友,可以后续阅读《芋道 Spring Boot 单元测试 Test 入门》文章。

  • 引入 spring-boot-maven-plugin 插件,用于将 Spring Boot 项目打包成 jar 或者 war 包。

    友情提示:对构建 Spring Boot 项目感兴趣的胖友,可以后续阅读《芋道 Spring Boot 持续交付 Jenkins 入门》文章。

3.4 配置文件

配置文件 application.properties 内容为空。

注意,Spring Boot 支持 YAML、PROPERTIES、JSON 等等格式的配置格式。

3.5 Demo02Application

Demo02Application 类,提供 Spring Boot 应用的启动类。代码如下:

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

还是老样子,通过执行 #main(String[] args) 方法,启动 Spring Boot 应用。这里,艿艿就不演示了,胖友自己去倒腾哈。

3.6 Demo02ApplicationTests

Demo02ApplicationTests 类,单元测试类。代码如下:

@SpringBootTest
class Demo02ApplicationTests {@Testvoid contextLoads() {}}
  • 在类上,添加 @SpringBootTest 注解,声明这是一个 Spring Boot 环境下的单元测试类。

运行 #contextLoads() 方法,执行一次单元测试。

4. IDEA x Spring Initializr

IDEA 内置了 Spring Boot 插件,提供了对 Spring Initializr 集成。

Spring Boot / Spring Initializr project wizard.

下面,我们来使用该插件,创建一个 Spring Boot 项目。

① 打开 IDEA,点击菜单 File -> New -> Project... 来创建项目。如下图所示:

② 选择 Spring Initializr 类型,点击「Next」按钮,进入下一步。输入 Maven 的 GroupIdArtifactId,如下图所示:

③ 点击「Next」按钮,选择需要的依赖,这里暂时我们只需要 Web 依赖。如下图所示:

④ 点击「Next」按钮,之后点击「Finish」按钮,完成 Maven 项目的创建。此时项目如下图所示:

和「3. Spring Initializr」是一致的,就不哔哔重复解释了。

666. 彩蛋

至此,我们已经完成了 Spring Boot 的快速入门,是不是非常好用。艿艿是 2011 年开始使用 Spring 框架的,从最早的 XML 配置,再到后面配合 Java 注解,之后又出了 JavaConfig 配置,一点一点感受 Spring 在开发友好的诚意。

更多 Spring Boot 的内容,欢迎胖友到 https://github.com/YunaiV/SpringBoot-Labs 中阅读艿艿写的《Spring Boot 专栏》。如果可以的话,记得给这个仓库点个 Star。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

如果你喜欢这篇文章,喜欢,转发。

生活很美好,明天见(。・ω・。)ノ♡

芋道 Spring Boot 快速入门相关推荐

  1. 芋道 Spring Boot JPA 入门(一)之快速入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  2. 芋道 Spring Boot Redis 入门

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/Redis/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. 快速入门 3. 序列化 4. 项目实践 5 ...

  3. spring boot 转xml格式报错解决方法_芋道 Spring Boot MyBatis 入门(一)之 MyBatis + XML...

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/MyBatis/「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. MyBatis + XML 2.1 引入 ...

  4. 芋道 Spring Boot 自动配置原理

    转载自  芋道 Spring Boot 自动配置原理 1. 概述 友情提示:因为本文是分享 Spring Boot 自动配置的原理,所以需要胖友有使用过 Spring Boot 的经验.如果还没使用过 ...

  5. 芋道 Spring Boot 对象转换 MapStruct 入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  6. 芋道 Spring Boot 消除冗余代码 Lombok 入门

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 ...

  7. 学习第三篇:【SpringBoot-Labs】芋道 Spring Boot 自动配置原理

    本周(8.21-8.27)将学习芋道 Spring Boot的以下文章: 8.21: 快速入门 8.22:Spring Boot 自动配置原理 .Jar 启动原理 8.23:调试环境. 热部署入门.消 ...

  8. 芋道 Spring Security OAuth2 入门

    芋道 Spring Security OAuth2 入门 总阅读量:28123次 <Dubbo 实现原理与源码解析 -- 精品合集> <Netty 实现原理与源码解析 -- 精品合集 ...

  9. spring boot 快速入门

    文章来源:https://www.cnblogs.com/junyang/p/8151802.html spring boot入门 -- 介绍和第一个例子 "越来越多的企业选择使用sprin ...

最新文章

  1. 虚拟函数-2、实现机制
  2. CF1097D Makoto and a Blackboard(期望)
  3. 【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
  4. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
  5. 使用RAID与LVM磁盘阵列技术。
  6. m.2接口和nvme区别_原来M.2、SATA接口的固态盘有这样的差别,难怪大家都选“它”!...
  7. [LeetCode] 141. Linked List Cycle 单链表判圆算法
  8. 打开d盘由于这台计算机的限制,又出现限制我想打开D盘、E盘,就是打不开,电脑提示:限制本 爱问知识人...
  9. jQuery插件实现网页底部自动加载-类似新浪微博
  10. java16进制取前几位_16位16进制数怎么取前8位和后8位
  11. 学习java第一天 (大白(●—●))
  12. Sketch中文版教程,已加星标的更新如何使用?什么是Sketch星标功能?
  13. 虚拟化--062 vsphere workstation bios启动
  14. 圣经闪卡 - Holy Bible Flash Cards
  15. 关于计算机的论文英语2000字,英语论文2000字左右
  16. svn conflict linux,解决svn update 产生Node remains in conflict的问题
  17. 养老保险怎么缴最划算?应该少交还是多交?
  18. 华硕飞行堡垒安装ubuntu一系列坑
  19. C++ 11 内容总结
  20. 歌德巴赫猜想数学证明

热门文章

  1. 开一个水果店如何进货呢,水果店进货多少
  2. 《现代软件工程--构建之法》第一章整理
  3. DIT和DIF实现快速傅里叶变换的FFT
  4. 软件测试需求频繁变更,测试中如何应对需求变更问题
  5. 让“数据库审计”服务保卫你的数据库
  6. Python——二进制16位加法器(采用手算二进制加法的过程实现)(tkinter实现)【2021-07-08】
  7. 用python输出斐波那契数列的前20项_python输出斐波那契数列
  8. 旅游行业如何做好网络舆情监测?
  9. 网通、电信、教育网IP查询
  10. 模拟电子技术(五)放大电路中的反馈