SpringBoot 系列(2)- 第一个 SpringBoot 程序
项目初始化
之前也介绍过使用 SpringBoot 构建应用是非常快速的,我们通过使用 SpringBoot Initializr 来构建项目结构以及依赖,SpringBoot Initializr 的使用方式由以下几种:
使用 Web 网站构建,其地址为start
使用 Spring Tool Suite 构建
使用 IntelliJ IDEA
使用 SpringBoot CLI springboot 提供的一个命令行工具,可以方便的构建项目
使用 Web 界面初始化
我们访问https://start.spring.io/
,可以看到最新的构建页面,不同时期的页面可能不同,但大致项目相同
Project 可以选择使用 Maven 或 Gradle 构建项目
Language 选择开发语言,SpringBooot 支持三种:Java、Kotlin、Groovy
SpringBoot 选择 SpringBoot 版本,之前最新的稳定版本是 2.1.5
Project Metadata 项目元数据,Group、Artifact 等,这里我们选择
Dependencies 起步依赖,这是 SpringBoot 能帮我们节省配置时间的关键,在后续我们会进行介绍,这里我们选择 Web 和 DevTools
点击生成,其会帮我们生成一个 zip 包,其中格式为:
ps:其中有一些是 Eclipse 生成的文件,比如.settings
、.classpath
等
使用 BootCli 进行初始化
Spring Boot CLI 是一个命令行工具,能使你快速的初始化 SpringBoot。其使用也非常简单,从 SpringBoot 官网下载Spring Boot CLI,并解压安装,在其 bin 目录有两个文件spring
和spring.bat
脚本文件,我们可以通过运行它们来构建项目,比如对于上述的项目,我们使用以下命令将达到同样的效果:
spring init -dweb,devtools --build maven -p war demo
init 使用 Spring Initializr 初始化一个项目
-d
参数 以逗号为分隔符的依赖
--build
参数 构建系统,默认为 maven,可选 gradle
-p
参数 表示项目的包,比如 jar、war
我们可以使用spring --help init
来查看帮助
运行 SpringBoot
项目内容
启动类
DemoApplication 是启动类,直接运行就可以
@SpringBootApplication
注解 开启了启动扫描和自动配置功能,它包含三个注解SpringApplication.run(DemoApplication.class, args)
启动引导 Spring 程序。DemoApplication 是最重要的配置类
当我们启动程序之后,会启动一个监听 8080 端口的 Tomcat 服务器,不过直接访问会报错。
配置文件
默认下载的项目中配置文件使用的 applicaiton.properties,现在将其替换为 application.yml,现在文件为空,暂时没有任何内容,我们可以在配置文件中进行很多配置,但是暂时我们可以测试的好像也就只有 Tomcat 的端口号,我们将其调整为 9000:
yml 文件的配置方式与 properties 文件不同,如果是上述配置,在 applicaiton.properties 中为:
测试类
下载下来的项目文件中,还有一个测试模板:
SpringRunner 如果我们使用的是 Junit4,则必须使用
@SpringBootTest
表名当前类是基于 SpringBoot 的测试类,可以指定启动类,它自动扫描@SpringBootConfiguration
注解的类,所以它能扫描的 DemoApplication 类
SpringBoot 的构建过程解析
通过上述的项目文件,我们发现 Spring Boot 与普通的 Spring 没有什么本质的差别,那么它是怎么达到自动加载依赖的功能呢,答案就在其构建文件中(Gradle 的 build.gradle,Maven 的 pom.xml),我们使用的是 Maven,所以我们可以看一下:
从 pom.xml 文件中,我们发看到有别于其他项目的配置
设置其 parent 指向了
org.springframework.boot:spring-boot-starter-parent
增加了一个插件
org.springframework.boot:spring-boot-maven-plugin
所有的依赖都没有设置版本
Demo 项目将spring-boot-starter-parent
作为父项目,就可以从其中继承很多常用依赖的版本(其实际配置是在spring-boot-dependencies
中设置的),所以可以不用设置版本号。
这样的好处
想想在没有这种依赖管理的之前,如果项目需要依赖包我们会怎么做:
从 Maven Repository 中搜索需要用到的依赖
复制到 pom.xml 中
跳转到 1,然后继续,直到找到所需要的依赖
构建项目,如果依赖的版本之间没有冲突,啊哈,运气,如果有冲突那就去网上搜索解决办法
依赖没有问题(不容易)
这还是在你写业务代码之前要做的工作,想想是不是很繁琐,关键是在你没开始写代码之前,你不确定这是正确的。
自动依赖管理的本质
maven 本身具有依赖管理的功能,上文也说了,所有的常用依赖都是在spring-boot-dependencies-*.pom
中设置的,我们打开``看一下,重点看一下 dependencyManagement 标签:
ps:dependencyManagement
的作用是声明依赖及版本,并不会实际引入依赖,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且 version 和 scope 都读取自父 pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的 jar 版本。
dependencies
的作用是声明并引入依赖,即使子项目中不声明该依赖,子项目也会引入父项目中的所有依赖。
使用其他版本代替传入的依赖
比如说在现在的项目中,我们会自动依赖,其版本为,如果我们要换版本比如说将其换成,那么我们可以直接在 pom.xml 中进行调整
运行 SpringBoot 程序
我们可以通过使用 IDE 中的在DemoApplication.java
上选择run as -> Java Application
来运行该程序。
这就是运行之后的效果,当然因为我们任何业务代码都没有写,所有访问项目时会出现默认的 404 页面。
参考
版权声明: 本文为 InfoQ 作者【引花眠】的原创文章。
原文链接:【http://xie.infoq.cn/article/a417ffd8a51564d6cb6f09a36】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论