构建一个简单的Spring Boot项目
11 构建一个简单的Spring Boot项目
这个章节描述如何通过Spring Boot构建一个“Hello Word”web应用,侧重介绍Spring Boot的一些重要功能。因为大多数的开发工具都支持Maven,所以我们使用它来构建这个应用。
网站 spring.io 包含了许多如何开始使用Spring Boot的指南。如果您需要解决具体的问题,可以先去这里看看。你可以跳过以下的步骤,通过 start.spring.io 网站来构建项目。这样做的话,你就可以直接编写代码啦。如果需要了解更多详情,点击 Spring Initializr documentation
在我们开始之前,先打开命令终端,运行以下命令,确认Java的版本和Maven的安装。
个人备注:Spring Boot在2.0以下,1.21以上包含1.21版本,jdk版本要求1.7;
2.0以上包含2.0 jdk版本要求1.8+
$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
11.1 创建POM文件
我们需要从创建Maven的pom.xml文件开始,可以这么理解,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>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
<!-- 在此处添加其他行... -->
</project>
通过以上的操作,应该可以正常将项目构建好,然后你可以通过运行mvn package命令来打包项目,这时候你可以忽略“jar will be empty - no content was marked for inclusion!”警告。
做完以上的步骤,你就可以将项目导入到类似IDEA的开发工具中。因为这个项目比较简单,我们继续用简单的text编辑器来构建项目,这样来的更为方便。
11.2 添加项目依赖
Spring Boot提交了许多“启动器”让你选择添加到项目依赖中。我们的示例已经在POM的部分章节中使用了spring-boot-starter-parent。它是一种特殊的启动器,提供了默认的Maven配置。它还提供了dependency-management部分,让你可以不用指定依赖包版本引用依赖的jar包。
其他的“启动器”提供了一些特殊开发需要的依赖。比如当我们开发web应用的时候,我们添加spring-boot-starter-web依赖。在此之前,我们先看看我们现在有哪些依赖,运行一下命令。
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree这个命令会以树形结构展示你项目的依赖。你可以看到spring-boot-starter-parent没有为自己提供任何依赖。为了让web应用可以正常运行,现在在你的pom.xml文件中添加“spring-boot-starter-web”依赖,具体如下所示:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果现在你再运行一次mvn dependency:tree命令,你会看到多出很多其他的依赖包,比如Tomcat web Server和Spring Boot。
11.3 编写代码
为了让完成我们的web应用,我们编写一个简单的Java类。Maven默认编译src/main/java下的代码,所以你需要在这个路径下新建Example.java类,然后添加如下代码:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Example.class, args);
}
}
尽管这里的代码量没有很多,但是做了的事情却不少,下面来具体介绍下这里面的重要部分。
11.3.1 注解 @RestController 和注解 @RequestMapping
在上面示例代码Example.java类中,@RestController是我们使用的第一个注解。这个注解被称之为构造型注解。对于我们来说,它暗示着这个类在Spring Boot中具有特殊的意义,即,这个类是web控制器,用来捕捉进来的请求。
@RequestMapping注解提供了路由信息,它告诉Spring任何HTTP以“/”路径的请求都将被映射到home方法中。@RestController还告诉了Spring将结果直接以字符串的方式返回到请求方。
@RequestMapping 和 @RestController注解是Spring MVC的注解,跟Spring Boot没有具体的关系,如果想要了解更多,可以看MVC章节的相关文档
11.3.2 @EnableAutoConfiguration注解
第二个使用在类上面的注释是 @EnableAutoConfiguration,这个注解告诉Spring通过你在应用添加的依赖包来猜测你对Spring的配置(其实用猜测不是特别的准确,就是通过已经有的jar包,提供默认的配置)。因为spring-boot-starter-web已经添加了Tomcat和Spring MVC,自动化配置就会假设你在开发Spring Web项目,从而会依照Web开发为你做相应的配置。
启动器和自动化配置
自动化配置设计的宗旨是同启动器协同工作,但是它们之间没有直接的联系。也就说,你可以自由的选择启动器以外的jar包,Spring Boot依然会尽可能为你的应用做自动化配置。
11.3.3 main方法
应用最后的部分就是这个“main”方法,这只是一个遵循了Java标准的程序入口方法。通过调用run方法,我们的“main”方法委托给了Spring Boot的SpringApplication类,SpringApplication再引导我们的应用,启动Spring,启动自动配置的Tomcat。我们需要将Example.class作为参数传递给SpringApplication,以便它知道哪部分才是Spring的重要组件。args数组也可以通过命令行参数传递。
11.4 启动Example项目
到了这里,你的应用应该可以正常启动运行了。因为你已经添加了在POM里引用了spring-boot-starter-parent,你还有一个有效的程序运行入口。在文件的根目录运行终端,输入mvn spring-boot:run启动你的项目,你应该会看到类似于下面的输出:
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.8.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
如果你打开了一个浏览器,输入地址: localhost:8080,你将会看到如下的输出:
Hello World!
想要关闭应用,只需要输入ctrl + C即可。
11.5创建一个可执行的Jar包
最后,我们通过创一个完全包含所需要的jar的应用来结束示例。可执行的jar(有时候被称之为“fat jars”,实在不知道怎么翻译这个词,胖夹?汗)将会包含已编译的class文件和运行时所需要的所有依赖jar。
Executable jars and Java
Java没有提供嵌套jar的标准方法,这可能会导致你在分发应用的时候出现问题。
为了解决这个问题,许多开发人员使用“uber”jars,一个uber jar可以将class和应用所有的依赖打包成单个完成物,一般就是一个jar。这种方式的问题在于,打包完成后,你就很难看到其中包含了哪些依赖包了。还有种情况就是如果两个包名是一样的,但内容却不一样,这也可能引发问题。
Spring Boot提供了另一种方式解决这个问题,具体查看different approach
为了完成一个完整的jar包,我们需要在应用pom文件中添加如下的代码:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parent已经在POM中绑定了打包目标,如果你没有使用这个,你需要自己申明使用。
保存你的pom.xml文件,运行一下命令:
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.8.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如果你打开target目录你将会看到myproject-0.0.1-SNAPSHOT.jar,这个jar包大概在10M左右的样子。如果你想看到里面的内容,可以运行jar tvf命令,具体如下:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
运行完后,你将会在target目录中看到一个名为myproject-0.0.1-SNAPSHOT.jar.original的文件,这是Maven在打包Spring Boot项目原始的文件。
运行项目,使用java -jar命令,具体如下:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.8.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
跟上面一样,关闭应用使用Ctrl + C命令
构建一个简单的Spring Boot项目的更多相关文章
- 一个简单的spring boot程序
搭建一个spring boot项目十分的方便,网上也有许多,可以参考 https://www.cnblogs.com/ityouknow/p/5662753.html 进行项目的搭建.在此我就不详细介 ...
- 新建一个新的spring boot项目
简单几步,在Eclipse中创建一个新的spring Boot项目: 1.Eclipse中安装STS插件: Help -> Eclipse Marketplace... Search或选择&qu ...
- 【spring cloud】子模块module -->导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做/或者 每次导入一个新的spring boot项目,IDEA不识别子module,启动类无法启动/右下角没有蓝色图标
如题:导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做 或者说每次导入一个新的spring boot项目,IDEA不识别,启动类无法启动,怎么解决 下面分别 ...
- 简单的Spring Boot项目——实现连接Mysql数据库
一.创建Spring Boot项目 参考:使用IntelliJ IDEA创建简单的Spring Boot项目 二.数据库.表的创建 三.项目开发 3.1 pom.xml文件配置 <?xml ve ...
- 【Spring Boot】创建一个简单的Spring Boot的 Demo
走进Spring Boot 文章目录 走进Spring Boot 环境搭建 新建Spring Boot项目 开始创建项目 配置JDK版本 和 Initializr Service URL 配置Proj ...
- 在eclipse中配置一个简单的spring入门项目
spring是一个很优秀的基于Java的轻量级开源框架,为了解决企业级应用的复杂性而创建的,spring不仅可用于服务器端开发,从简单性.可测试性和松耦合性的角度,任何java应用程序都可以利用这个思 ...
- 用Java构建一个简单的WebSocket聊天项目之新增HTTP接口调度
采用框架 我们整个Demo基本不需要大家花费太多时间,就可以实现以下的功能. 用户token登录校验 自我聊天 点对点聊天 群聊 获取在线用户数与用户标签列表 发送系统通知 首先,我们需要介绍一下我们 ...
- Spring学习(二)——使用Gradle构建一个简单的Spring MVC Web应用程序
1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module ...
- 使用IntelliJ IDEA创建简单的Spring Boot项目
方法一: File - New -Project 创建结束后进行测试运行,修改代码如下: package com.springboot.testone; import org.springframew ...
随机推荐
- Panabit镜像功能配合wireshark抓包的方法
Panabit镜像功能配合wireshark抓包的方法 Panabit的协议识别都是基于数据包的特征,因此捕获数据包样本是我们进行识别第一步要做的事情.下面就和大家说一下如何捕获网络应用的数据包. 到 ...
- VUE小案例--跑马灯效果
自学Vue课程中学到的一个小案例,跑马灯效果 <!DOCTYPE html> <html lang="zh-CN"> <head> <me ...
- 源码分析--HashSet(JDK1.8)
HashSet为无序不可重复集合.底层几乎全部借助HashMap实现,比较简单.本篇简要分析一下HashSet源码. 首先是成员变量: 1.真正保存数据的HashMap实例 private trans ...
- Linux学习笔记2-CentOS7安装tomcat8
1.下载tomcat:apache-tomcat-8.5.16.tar.gz 下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat ...
- 靶场练习--sqli(3&4)
第三关 先解决一下第二关遗留下来的问题,嘻嘻.看来数据库原理应当过一遍~ 1.首先判断是否有SQL注入,然后再看是数字型.字符型.发现这里是字符型. 2.order by 查询字段数,记得后面要加一个 ...
- raw, SOCK_RAW - Linux IPv4 raw socket.
总 览 #include <sys/socket.h> #include <netinet/in.h> raw_socket = socket(PF_INET, SOCK_RA ...
- python正则表达式 re (二)escape
背景: 在使用python的过程中,你肯定对转义字符的使用苦恼过,因为有的时候我们需要使用一些特殊符号如”$ * . ^”等的原意,有时候需要被转义后的功能,并且转义字符地使用很繁琐,容易出错,那拯救 ...
- 使用jstack排查线程问题
以一个例子来演示排查服务器cpu占用率过高的问题. 准备 将下面的代码文件上传到服务器上,然后使用javac编译,并使用java命令将程序跑起来. public class JStackCase { ...
- css 文字对齐
// html <div>姓名</div> <div>手机号码</div> <div>账号</div> <div>密 ...
- Win7 ODBC驱动 Excel (转)
“控制面板-管理工具-数据源(ODBC)”,打开“ODBC数据源管理器”窗口,然后“添加”,打开“创建新数据源”的窗口,最后选择Microsoft Access Driver(*.mdb)选项,往后等 ...