构建一个简单的Spring Boot项目
2019-10-09 09:29:18来源:博客园 阅读 ()
构建一个简单的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命令
原文链接:https://www.cnblogs.com/deky97/p/11638633.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:二、SpringBoot基础配置
下一篇:shiro小记
- 构建自己的jar包上传至Mvaen中央仓库和版本更新 2020-06-11
- Linux简单命令的学习 2020-06-10
- 因为命名被diss无数次。简单聊聊编程最头疼的事情之一:命名 2020-06-10
- 作为一个面试官,我想问问你Redis分布式锁怎么搞? 2020-06-10
- 「starter推荐」简单高效Excel 导出工具 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash