前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十年老架构教你如何开启第一个springboot项目,不想秃头就别学了

十年老架构教你如何开启第一个springboot项目,不想秃头就别学了

作者头像
愿天堂没有BUG
发布2022-10-28 15:45:44
8380
发布2022-10-28 15:45:44
举报
文章被收录于专栏:愿天堂没有BUG(公众号同名)

开启第一个Spring Boot项目

按照SpringBoot带给人们简化企业级应用开发的承诺,本节将演示如何开启第一一个SpringBoot项目。创建Spring Boot应用的过程非常简单,甚至开发人员不需要输入任何代码,就能完成一个Spring Boot项目的构建。

配置环境

为了演示本例子,需要采用如下开发环境。

●JDK8。

Gradle 4.0。

其中,JDK的安装和Gradle的安装可以参阅2.4节的内容。

检查JDK版本情况,确保不低于Java 8版本。

代码语言:javascript
复制
$ java -versionjava version "1.8.0 112"Java (TM) SE Runtime Environment (build 1.8.0 -b15)Java HotSpot (TM) -Bit Server VM (build 25.112-b15, mixed mode )

检查Gradle版本情况。

代码语言:javascript
复制
$ gradle -vGradle 4.0Build time:  -06-14 :11 :08 UTCRevision:    6a5 fcb4e2dfe1d6aa0b73a4e09e8cecb5a5Groovy:  2.4.11Ant:  Apache Ant (TM) version 1.9.6 compiled on June  JVM:  1.8.0  (Oracle Corporation 25.112-b15)OS :  Windows  10.0 amd64

通过Spring Initializr初始化一个Spring Boot原型

Spring Initializr 是用于初始化Spring Boot项目的可视化平台。虽然通过Maven或Gradle来添加Spring Boot提供的Starter 使用起来非常简单,但是由于组件和关联部分众多,有这样-一个可视化的配置构建管理平台对于用户来说非常友好。下 面将演示如何通过Spring Initializr 初始化-一个Spring Boot项目原型。

访问网站hts://sart.spring.io/, 该网站是Spring 提供的官方Spring Initializr 网站,当然,也可以搭建自己的Spring Initializr 平台,有兴趣的读者可以访问htst:ithbroo/prig i/nitilizx/来获取Spring Initializr项目源码。

按照Spring Initalizr页面提示,输入相应的项目元数据( Project Metadata )资料并选择依赖。

由于我们是要初始化一一个Web项目,所以在依赖搜索框中输入关键字“web” ,并且选择“Web:-Full-stack web development with Tomcat and Spring MVC"选项。顾名思义,该项目将会采用SpringMVC作为MVC的框架,并且集成了Tomcat作为内嵌的Web容器。图2-2展示了Spring Initializr的管理界面。

这里我们采用Gradle作为项目管理工具,Spring Boot版本选型为2.0.0.M4,Group 的信息填为“com.waylau.springcloud” , Artifact 填为“ializ-start” 。最后,单击“Generate Project"按钮,此时,可以下载到以项目“initializr-start” 命名的zip包。该压缩包包含了这个原型项目的所有源码及配置,将该压缩包解压后,就能获得initializr -start项目的完整源码。

这里我们并没有输入任何代码,却已经完成了一个完整Spring Boot项目的搭建。

用Gradle编译项目

切换到initializr-start项目的根目录下,执行gradle build来对项目进行构建,构建过程如下。

代码语言:javascript
复制
$ gradle build
Starting a Gradle Daemon,  busy Daemon could not be reused, use --statusfor details
Download https:/ / repo. spring. io/mi lestone/org/ springframework/boot/spring-boot-gradle-plugin/2.0.0.M4/spring-boot-grad1e-p1ugin-2.0.0.M4.
pom
Download https:/ /repo. spring. io/milestone/ org/ springf ramework/boot/spring-boot-tools/2.0.0.M4/ spring-boot-tools-2.0.0.M4. pom
Download https:/ / repo. spring. io/milestone/org/ springframework/boot/spring-boot-parent/2.0.0.M4/ spring -boot- -parent-2.0.0.M4.pom 
Download https:/ / repo. spring. io/milestone/org/ springfr amework/boot/spr ing-boot-dependencies/2.0.0.M4/spring-boot-dependencies-2.0.0.M4. pom
Download https:// repo1.maven. org/maven2/com/ fasterxml/ jackson/ jackson-
bom/2.9. /jackson-bom-2.9.1.pom
Download https:// repol .maven. org/maven2/com/ fasterxml/j ackson/ jackson-
parent/2.9.1/ jackson-parent-2.9.1. pom
Download https:// repo1.maven . org/maven2/ com/ fasterxml/oss-parent/30/oss-parent-30. pom
Download https://repo1 .maven. org/maven2/ io/netty/netty-bom/4.1.15.Final/netty-bom-4.1.15. Final. pom
Download https:// repo. spring. io/milestone/ io/projectreactor/ reactor-bom/
Bi smuth- -M4/ reactor-bom- Bi smuth-M4. pom 
Download https://repo1 .maven. org/maven2/org/apache/ logging/og4j/og4j-
bom/2.9.0/og4j-bom-2.9.0. pom
Download https:// repo.spring.io/milestone/org/springframework/ spring-
framework-bom/5.0.0. RC4/ spring- framework-bom-5.0.0. RC4.pom
Download https://repo.spring. io/milestone/org/ springframework/data/spring-data-releasetrain/Kay-RC3/ spring-data-releasetrain-Kay-RC3. pom
Task :test-09-26 ::53.234 INFO  --- [
Thread-5] o.
s.w.c.s. Gener i cWebAppl icationContext
Closing org. spr ingfr amework.
web. context. support. Generi cWebApplicationContext@bb1267: startup date 
[Tue Sep  :: CST ]; root of context hierarchy
BUILD SUCCESSFUL in m s actionable tasks:  executed

我们来分析一下执行gradle build的整个过程发生了什么。

首先,在编译开始阶段, Gradle 会解析项目配置文件,而后去Maven仓库找相关的依赖,并下载到本地。速度快慢取决于本地的网络。控制台会打印整个下载、编译、测试的过程,当然,这里为了节省篇幅,省去了大部分的下载过程。最后,显示“BUILD SUCCESSFUL"的字样,说明已经编译成功了。

我们回到项目的根目录下,可以发现多出了一个build 目录,在该目录buildlibs'下可以看到-一个 iniliz-start-0.0.1-SNAPSHOTjar,该文件就是项目编译后的可执行文件。在项目的根目录,通过下面的命令来运行该文件。

java -jar build/libs/ initializr-start-0.0.1-SNAPSHOT.jar

成功运行后,可以在控制台看到如下输出。

代码语言:javascript
复制
$ java -jar build/libs/initializr-start-..-SNAPSHOT.jar
代码语言:javascript
复制
2017-09-26 23:34:35. 961INFO 776 --- [main] C.w.s.c.i. InitializrStartApplication: Starting InitializrStartAppl ication on AGOC3- 705091335 with PID 776 (D: \workspaceGitosc \spring-cloud -microservices-development \samples \initial izr-start \build\libs\initializr-start-0.0.1-SNAPSHOT.jar started by Administrator in D: \workspaceGitosc\spring-cloud-microservices-development \samples\initializr-start)
2017-06-30 00:55:27.874INFO 11468 --- [main] o.s.b.w. embedded.tomcat . TomcatWebServer : Tomcat started on Port(s) : 8080(http)
2017-06-30 00:55:27.874INFO 11468 --- [main]c.w.s.b.b.i. Initial izrStartApplicationStarted InitializrStartApplication in 4.27 seconds (JVM running for 5.934)

我们可以观察一-下控制台输出的内容(为了节省篇幅,省去了中间大部分内容)。在开始部分,是一个大大的“Spring” 的横幅,并在下面标明了Spring Boot的版本号。该横幅也称为Spring Boot的“banner”

用户可以根据自己的个性需求来自定义banner。 例如,在类路径下添加一个banner.txt文件,或者通过将banner.location设置到此类文件的位置来更改。如果文件有一个不寻常的编码,也可以设置banner.charset (默认是UTF-8)。除了文本文件,还可以将banner.gif、banner.jpg 或banner.

png图像文件添加到类路径中,或者设置banner. image.location属性。这些图像将被转换成ASCII艺术表现,并打印在控制台上方。

Spring Boot默认寻找Banner的顺序如下。

●依次在类路径下找文件banner.gif、 banner.jpg或banner.png, 先找到哪个就用哪个。

●继续在类路径 下找banner.txt。

●上面都没有找到的话,用默认的Spring Boot Banner, 就是在上面控制台输出的最常见的那个。

从最后的输出内容可以观察到,该项目使用的是Tomcat容器,项目使用的端口号是8080。

在控制台输入“Ctrl +C",可以关闭该程序。

探索项目

在启动项目后,在浏览器里面输入“ttp:/ocalhost:8080/” ,我们可以得到如下信息。

代码语言:javascript
复制
Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeingthis as a fallback.Tue Sep  :52:05 CST There was an unexpected error (type=Not Found, status=404) .No message available

由于在我们项目里面,还没有任何对请求的处理程序,所以Spring Boot会返回上述默认的错误提示信息。

我们观察一下initializr start项目的目录结构。

1. build.gradle文件

在项目的根目录,我们可以看到build.gradle文件,这个是项目的构建脚本。Gradle 是以Groovy语言为基础,面向Java应用为主。基于DSL (领域特定语言)语法的自动化构建工具。

Gradle这个工具集成了构建、测试、发布及常用的其他功能,如软件打包、生成注释文档等。与以往Maven等构架工具不同,配置文件不需要繁琐的XML,而是简洁的Groovy语言脚本。

代码语言:javascript
复制
对于本项目的build.gradle文件中配置的含义,下面已经添加了详细注释。// buildscript 代码块中脚本优先执行buildscript// ext用于定义动态属性ext {
springBootVersion = '2.0.0.M4'//使用了Maven的中央仓库及Spring自己的仓库(也可以指定其他仓库)repositories {
mavenCentral ()
maven { url "https:/ / repo. spring. io/ snapshot" }
maven { url "https://repo. spring. io/milestone" }//依赖关系dependencies {// classpath声明 了在执行其余的脚本时,ClassLoader可以使用这些依赖项classpath ("org . spr ingframework . boot: spring-boot-gradle-plugin:$
{ springBootVersion}")
}//使用插件apply plugin: 'java'apply plugin: 'eclipse 'apply plugin: 'org. springframework.boot'apply plugin: ' io. spr ing . dependency-management '//指定了生成的编译文件的版本,默认为jar包group = ' com. waylau. spring. cloud'version = '0.0. 1- SNAPSHOT'//指定编译. java文件的JDK版本sourceCompatibility = 1.8//使用了Maven的中央仓库及Spring自己的仓库(也可以指定其他仓库)repositories {
mavenCentral ()
maven { url "https:// repo. spring. io/ snapshot" }
maven { url "https:/ /repo. spring. io/milestone" }//依赖关系dependencies {//该依赖用于编译阶段compile (' org. spr ingframework . boot: spring-boot-starter-web')//该依赖用于测试阶段testCompile('org. springframework. boot:spring-boot-starter-test')

2. gradlew和gradlew.bat文件

gradlew和gradlew.bat这两个文件是Gradle Wrapper用于构建项目的脚本。使用Gradle Wrapper

的好处在于,可以使项目组成员不必预先在本地安装好Gradle工具。在用Gradle Wrapper构建项目时,Gradle Wrapper首先会去检查本地是否存在Gradle,如果没有,会根据配置上的Gradle的版本和安装包的位置来自动获取安装包并构建项目。使用Gradle Wrapper的另一个好处在于,所有的项目组成员能够统一项目所使用的Giradle版本,从而规避了由于环境不一-致 导致的编译失败的问题。

对于Gradle Wrapper的使用,在类似UNIX的平台上(如Linux和Mac OS),直接运行gradlew脚本,就会自动完成Gradle环境的搭建。而在Windows环境下,则执行gradlew.bat文件。

3. build和.gradle目录

build和.gradle目录都是在Gradle对项目进行构建后生成的目录和文件。

4. Gradle Wrapper

Gradle Wrapper免去了用户在使用Gradle进行项目构建时需要安装Gradle的繁琐步骤。每个

Gradle Wrapper都绑定到-一个特定版本的Gradle,所以当第一次在给定Gradle 版本下运行上面的命令之一时,它将下载相应的Gradle发布包,并使用它来执行构建。默认情况下,Gradle Wrapper的发布包指向的是官网的Web服务地址,相关配置记录在gradle-wrapper.properties文件中。我们查看一下Spring Boot提供的这个Gradle Wrapper 的配置,参数“distributionUrl” 就是用于指定发布包的位置。

代码语言:javascript
复制
#Fri Jul 28 13:37:07 BST 2017distributionBase=GRADLE USER HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE USER_ HOME
zipStorePath=wrapper/dists
distributionUrl=https\:/ /services .gradle. org/distributions/gradle-
4.0.2-bin.zip

从上述配置可以看出,当前Spring Boot采用的是Gradle 4.0.2版本。我们也可以自行来修改版本和发布包存放的位置。例如,下面这个例子 ,我们指定了发布包的位置在本地的文件系统中。

distributionUrl=file\:/D:/software/webdev/java/gradle-4.0-all.zip

5. src目录

如果用过Maven,那么肯定对src目录不陌生。Gradle 约定了该目录下的main目录下是程序的源码,test 下是测试用的代码。

如何提升Gradle的构建速度

由于Gradle工具是舶来品,所以对于国人来说,很多时候会觉得编译速度非常慢。这里面很

大一部分原因是由于网络的限制,毕竟Gradle及Maven的中央仓库都架设在国外,国内要访问,

速度上肯定会有一些限制。下面介绍几个配置技巧来提升Gradle的构建速度。

1. Gradle Wrapper指定本地

正如之前我们提到的,GradleWrapper是为了便于统一版本。如果项目组成员都明确了GradleWrapper,尽可能事先将Gradle放置到本地,而后修改Gradle Wrapper配置,将参数“distributionUr"指向本地文件。例如,将Gradle放置到D盘的某个目录:

代码语言:javascript
复制
#distributionUrl=https\://services . gradle . org/distributions/gradle-4.0.2-bin.zipdistributionUrl=file\:/D:/software/webdev/java/gradle-4.0-all.zip

2.使用国内Maven镜像仓库

Gradle可以使用Maven镜像仓库。使用国内的Maven镜像仓库可以极大地提升依赖包的下载速度。下面演示了使用自定义镜像的方法。

代码语言:javascript
复制
repositories {/ /mavenCentral ()maven { url "https:/ / repo. spring. io/ snapshot" }maven { url "https:/ /repo. spring. io/milestone" }maven { url "http:/ /maven. aliyun. com/ nexus/ content/groups/public/"}

这里注释掉了下载缓慢的中央仓库,改用自定义的镜像仓库...

本篇给大家介绍的是开启第一个springboot项目,喜欢的朋友可以转发关注一波!!

下篇给大家介绍的内容是实现Spring Boot 版本的“Hello World”应用,大家准时学习哈!!!

应该还不至于秃头吧!

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 愿天堂没有BUG 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开启第一个Spring Boot项目
  • 配置环境
  • 通过Spring Initializr初始化一个Spring Boot原型
  • 用Gradle编译项目
  • 探索项目
  • 如何提升Gradle的构建速度
  • 本篇给大家介绍的是开启第一个springboot项目,喜欢的朋友可以转发关注一波!!
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档