Spring Boot参考文档(4)

来源:互联网 发布:dmg文件怎么安装 mac 编辑:程序博客网 时间:2024/06/11 01:19

原文链接:http://www.itbus.tech/detail.html?id=8717

让我们来开始我们的第一个项目,并借此来了解Spring Boot的一些关键功能。

我们会使用Maven来构建项目,因为很多IDE都支持Maven。

spring.io这个站点包含很多”Getting Started”指南,你可以在这里寻找一些针对性的问题。

在我们开始之前,请先检查你已经安装好Java和Maven了

$ java -versionjava version "1.7.0_51"Java(TM) SE Runtime Environment (build 1.7.0_51-b13)Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
$ mvn -vApache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00)Maven home: /Users/user/tools/apache-maven-3.1.1Java version: 1.7.0_51, vendor: Oracle Corporation

这个例子需要创建一个目录,请在这一步就创建好目录,并进入目录。

创建POM

先创建一个Maven的pom.xml文件,pom.xml是Maven构建你的项目的食谱。使用编辑器,按照下面的来写你的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 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>1.5.3.RELEASE</version>    </parent>    <!-- Additional lines to be added here... --></project>

你可以输入mvn package来测试是否成功。

在这一步,其实你可以用IDE来import这个项目(事实上,很多人都会这么做),不过我们还是会使用文本编辑器+命令行的方式来演示。

增加依赖

Spring Boot有很多”Starters”,这样是为了帮助我们可以更容易的添加我们需要的依赖。我们上面的例子已经用到了spring-boot-starter-parent,这是一个特殊的starter,他的作用是提供很多Maven的默认设置。他还提供了一个dependency-management,这样你可以省略一些“受过祝福”的依赖的版本。

其他的”Starters”就是简单的提供了一些你希望开发某个特定类型的应用所需的依赖。由于我们想要开发一个web应用,那我们就增加spring-boot-starter-web这个依赖————但是在那之前,我们先看看我们已经依赖了哪些东西吧。

$ 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依赖吧。

<dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency></dependencies>

我们在运行mvn dependency:tree看看,就会看到多了很多依赖,包括Tomcat服务器的依赖,还有Spring Boot他自己的一些依赖。

写代码

为了完成我们的web应用,我们还需要创建一个Java文件。Maven会自动的变异sec/main/java目录下的Java文件,所以我们创建一个文件src/main/java/Example.java

import org.springframework.boot.*;import org.springframework.boot.autoconfigure.*;import org.springframework.stereotype.*;import org.springframework.web.bind.annotation.*;@RestController@EnableAutoConfigurationpublic class Example {    @RequestMapping("/")    String home() {        return "Hello World!";    }    public static void main(String[] args) throws Exception {        SpringApplication.run(Example.class, args);    }}

代码虽然不多,但是这份代码所干的事可不少啊。让我们一步一步来弄懂他。

@RestController和@RequestMapping注解

在我们的Example中,第一个注解就是@RestController。对我们程序员看来,这是一个提示,对Spring来说,这意味着 这个calss扮演着一个特殊的角色。在这种情况下,这个类是一个web@Controller,这样Spring就会用它来处理web请求。

@RequestMapping这个注解提供了路由信息。他告诉Spring,任何path是”/”的请求都应该路由到home方法。@RestController注解告诉Spring直接返回string给调用者。

严格来说,@RestController@RequestMapping这两个注解是Spring MVC的注解(不是Spring Boot的)。

@EnableAutoConfiguration注解

第二个类级别的注解是@EnableAutoConfiguration。这个注解让Spring根据你的jar依赖去猜你会如何配置Spring。因为spring-boot-starter-web被添加到你的依赖中,所以这个auto-configuration会假设你正在开发一个web应用,然后做出相应的配置。

Starter和Auto-Configuration

Auto-Configuration可以和Starter很好的配合工作,但是这两个概念是没有关系的。你可以自由的选择你需要的依赖,而不仅仅是使用Starter,这种情况下,Auto-Configuration还是会尽力去帮你自动配置。

main方法

我们代码的最后一部分就是main方法了。这就是一个标准的java规范的程序入口。我们的main方法里会调用Spring Boot的SpringApplicationSpringApplication将会启动Spring,继而启动Tomcat服务器,最后启动整个应用。我们需要传递一个参数Example.classrun方法,告诉SpringApplication哪一个类是最原始的Spring组件。这个args也可以传递任何命令行参数。

运行这个例子

到这一步,我们的应用应该就可以工作了。在项目的根目录,输入mvn spring-boot:run就可以启动这个应用:

$ mvn spring-boot:run  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::  (v1.5.3.RELEASE)....... . . ........ . . . (log output here)....... . . ......... Started Example in 2.222 seconds (JVM running for 6.514)

你可以在本机的浏览器打开localhost:8080,可以看到这样的输出:

Hello World!

然后可以输入ctrl-c来优雅的推出应用。(译者认为这是粗暴的退出应用)

创建一个可以直接执行的jar包

让我们最后来创建一个可以直接执行的jar包来完成这个示例。可执行jar包(有时候被称作“胖jar包”)是我们所有编译过的class文件,和所有依赖的jar包的一个归档。

可执行jar包

Java本身没有提供一个标准方式来加载嵌套的jar,这就给发布一个独立的应用带来了困扰。
为了解决这个问题,很多开发者使用”uber” jars,就是一个包含所有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包含了配置来帮顶repackage(重新打包)的goal(目的,Maven术语)。如果你没有使用parent,那你需要自己申明配置。

可参考plugin documentation

保存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:1.5.3.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这是Maven在Spring Boot重新打包之前创建的jar包。

为了运行这个应用,输入java -jar命令:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::  (v1.5.3.RELEASE)....... . . ........ . . . (log output here)....... . . ......... Started Example in 2.536 seconds (JVM running for 2.864)

和之前一样,可以输入ctrl-c来优雅的退出应用。(译者认为这是粗暴的)

0 0