本节描述如何开发一个简单的“Hello World!” web应用程序来突出了Spring Boot的一些关键特性,咱们使用Maven来构建这个项目,由于大多数IDE都支持它。html
spring.io网站包含许多使用Spring Boot的“ 入门”指南,若是你须要解决一个具体的问题,先检查一下。
你能够经过使用 start.spring.io和从依赖关系搜索器中选择“Web”启动器来快捷地完成如下步骤,这样作会生成一个新的项目结构,这样你就能够 当即开始编写代码,查看 Spring Initializr文档了解更多细节。
在开始以前,打开一个终端并运行如下命令,以确保安装了有效的Java和Maven版本:java
$ 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.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00) Maven home: /usr/local/Cellar/maven/3.3.9/libexec Java version: 1.8.0_102, vendor: Oracle Corporation
此示例须要在其本身的文件夹中建立,随后的指令假设你已经建立了一个合适的文件夹,而且它是你当前的目录。
咱们须要先建立一个Maven pom.xml
文件,pom.xml
是用于构建项目的,打开你最喜欢的文本编辑器并添加如下内容:git
<?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>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.0.5.RELEASE</version> </parent> <!-- Additional lines to be added here... --> </project>
前面的清单应该给你一个工做构建,你能够经过运行mvn package
来测试它(如今,你能够忽略“jar will be empty - no content was marked for inclusion!
”的警告)。github
此时,你能够将项目导入到IDE中(大多数现代Java IDE都包含对Maven的内置支持),为了简单起见,咱们继续使用这个示例的纯文本编辑器。
Spring Boot提供了一些“Starters”,可让你将jar添加到类路径中,咱们的示例应用程序已经在POM的父部分使用了spring-boot-starter-parent
,spring-boot-starter-parent
是一个特殊的starter,它提供有用的Maven默认值,它还提供了一个dependency-management部分,以便你能够“幸福”的省略依赖项的version
标记。web
其余“Starters”提供了在开发特定类型的应用程序时可能须要的依赖项,因为咱们正在开发一个web应用程序,因此咱们添加了一个spring-boot-starter-web
依赖项。在此以前,咱们能够经过运行如下命令查看当前所拥有的内容:spring
$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree
命令以树的形式打印项目依赖项,你能够看到spring-boot-starter-parent
自己不提供依赖性,要添加必要的依赖项,请编辑pom.xml
并将spring-boot-starter-web
依赖项当即添加到parent
部分下面:apache
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
若是你再次运行mvn dependency:tree
,你会看到如今有许多额外的依赖项,包括Tomcat web服务器和Spring Boot自己。segmentfault
要完成咱们的应用程序,咱们须要建立一个Java文件,默认状况下,Maven从src/main/java
编译源代码,所以你须要建立该文件夹结构,而后添加一个名为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) throws Exception { SpringApplication.run(Example.class, args); } }
虽然这里没有多少代码,但仍有不少工做要作,咱们将在接下来的几节中讨论重要的部分。浏览器
在咱们的Example
类上的第一个注解是@RestController
,这被称为构造型注解,它为阅读代码的人们提供了一些提示,而且为Spring提供了一个特定的角色。在本例中,咱们的类是一个web @Controller
,因此Spring在处理传入web请求时考虑它。
@RequestMapping
注解提供了“路由”信息,它告诉Spring,任何带有/
路径的HTTP请求都应该映射到home
方法,@RestController
注解告诉Spring将生成的字符串直接呈现给调用者。
@RestController
和@RequestMapping
注解是Spring MVC注解,(它们不是特定于Spring Boot的)有关更多详细信息,请参见Spring参考文档中的 MVC部分。
第二个类级别注解是@EnableAutoConfiguration
,这个注解告诉Spring Boot基于你添加的jar依赖项“猜想”你想如何配置Spring,由于Spring-boot-starter-web
添加了Tomcat和Spring MVC,因此自动配置假设你正在开发一个web应用程序,并相应地设置Spring。
Starters和自动配置
自动配置被设计成与“Starters”很好地工做,可是这两个概念并无直接关联。你能够自由地挑选和选择除starters以外的jar依赖项,Spring Boot仍然尽力自动配置你的应用程序。
咱们的应用程序的最后一部分是main
方法,这只是遵循应用程序入口点的Java约定的标准方法。咱们的main方法经过调用run
委托给Spring Boot的SpringApplication
类,SpringApplication
引导咱们的应用程序启动Spring,而Spring又启动了自动配置的Tomcat web服务器。咱们须要经过Example.class
做为run
方法的参数,以告诉SpringApplication
它是主Spring组件,args
数组也被传递,以公开任何命令行参数。
此时,你的应用程序应该能够工做了,由于你使用了spring-boot-starter-parent
POM,因此你有一个有用的run
目标,你可使用它来启动应用程序。类型mvn spring-boot:run
从根项目目录运行,以启动应用程序,你应该会看到相似以下的输出:
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
若是你打开一个web浏览器到localhost:8080,你应该会看到如下输出:
Hello World!
要优雅地退出应用程序,按ctrl-c
。
咱们经过建立一个能够在生产中运行的彻底自包含的可执行jar文件来完成咱们的示例,可执行jar(有时称为“fat jars”)是包含你的编译类的存档文件,以及你的代码须要运行的全部jar依赖项。
可执行jar和Java
Java没有提供加载嵌套jar文件的标准方法(jar文件自己包含在一个jar中)。
若是你但愿分发一个自包含的应用程序,这可能会有问题。为了解决这个问题,许多开发人员使用“uber”jar,一个uber jar将全部应用程序依赖项的全部类打包成一个归档文件,这种方法的问题在于,很难看到应用程序中有哪些库,若是在多个jar中使用相同的文件名(但使用不一样的内容),也会有问题。
Spring Boot采用了一种不一样的方法,让你能够直接嵌套jar。
要建立一个可执行jar,咱们须要将spring-boot-maven-plugin
添加到咱们的pom.xml
中,要作到这一点,请在dependencies
部分下面插入如下几行:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
spring-boot-starter-parent
POM包括<executions>
配置以绑定repackage
目标,若是你不使用父POM,你须要本身声明这个配置,有关详细信息,请参见 插件文档。
保存你的pom.xml
并从命令行运行mvn package
,以下所示:
$ 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.0.5.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
若是查看target
目录,应该会看到myproject-0.0.1-snapshot.jar
,文件的大小应该在10MB左右,若是你想查看内部,可使用jar tvf
,以下所示:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
你还应该看到一个更小的文件,名为myproject-0.0.1-snapshot.jar.original
在target
目录中,这是Maven在Spring Boot从新打包以前建立的原始jar文件。
要运行该应用程序,请使用java -jar
命令,以下所示:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864)
如前所述,退出应用程序,按ctrl-c
。
但愿这一节提供了一些Spring Boot基础知识,并帮助你编写本身的应用程序。若是你是面向任务的开发人员,你可能想跳到spring.io和查看一些入门指南来解决具体的“我如何用Spring实现它?”的问题,咱们还有Spring boot特有的“How-to”参考文档。
Spring Boot repository也有一些你能够运行的示例,这些示例与代码的其他部分无关(也就是说,你不须要构建其他的代码来运行或使用示例)。