Spring Boot应用程序开发入门(九)

这篇博文主要用于新手学习Spring Boot,同时也记录自己学习的过程…
文章内容主要来源于易百教程

在本节中,我们来再Java中开发一个简单的”Hello World!”Web应用程序,突出一些Spring Boot的主要特性。在这里将使用Maven来构建这个项目,因为大多数IDE支持它。
在开始之前,打开一个终端,检查是否安装了Java和Maven的有效版本。

C:\Users\nicoletang>java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

C:\Users\nicoletang>mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: D:\apache-maven-3.5.0-bin\bin\..
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_60\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

此示例需要在其自己的文件夹中创建。后续说明假定您已创建了一个合适的文件夹,并且它是“当前目录”。

提示,如果还没有安装 Maven ,请参考安装教程 - https://blog.csdn.net/ththcc/article/details/78650233


创建POM文件


我们需要从创建一个Maven pom.xml文件开始。pom.xml是将用于构建项目的配置,在这个示例中,把它放在D:\spring-boot\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.4.3.RELEASE</version>
    </parent>

    <!-- Additional lines to be added here... -->

</project>

它给出了一个工作构建,可以通过运行mvn package (可以忽略”jar will be empty –no content was marked for inclusion!”现在警告)测试它。
执行结果如下-
这里写图片描述

此时,可以将项目导入到IDE中(最新的Java IDE包括对Maven的内置支持)。为了简单起见,这里将继续为此示例使用纯文本编辑器。


添加类路径依赖


Spring Boot提供了一些”启动器”,使得容易添加jar到你的类路径。在我们的示例应用程序已经在POM的父部分中使用了spring-boot-starter-parentspring-boot-starter-parent是一个特殊的启动器,提供了有用的Maven默认值。它还提供了一个依赖关系管理部分,以便您可以省略”blessed”依赖关系的version标签。
其他”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文件,并在parent部分的下面添加spring-boot-starter-web依赖关系:

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

完整的 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.4.3.RELEASE</version>
    </parent>

    <!-- Additional lines to be added here... -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

如果再次运行mvn dependency:tree命令,将看到现在还有许多其他依赖项,包括Tomcat Web服务器和Spring Boot本身。



编写代码


要完成上面的应用程序示例,我们需要创建一个单一的Java文件。Maven将默认从src/main/java编译源代码,所以需要创建该文件夹结构,然后添加一个名为src/main/java/Example.java的文件,完整的文件路径是 D:/spring-boot/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
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() {
        return "Hello World!"; // Copyright: w w w . y i I b A i.c O m 
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Example.class, args);
    }

}

虽然这里没有太多的代码,但背后有很多事情正在发生。让我们看看代码的重要部分。


@RestController@RequestMapping注解
Example类的第一个注解是@RestController。这称为构造线注释,它为阅读代码的人提供了提示,对于Spring,该类扮演了一个特定的角色。在这种情况下,这个类是一个web@Controller,因此Spring会在处理传入的Web请求时考虑它。
@RequestMapping注解提供了“路由”信息。它告诉Spring任何带有路径”/”到HTTP请求应该映射到home方法。@RestController注解告诉Spring将生成的字符串直接返回给调用者。

@RestController和@RequestMapping注解是Spring MVC注释(它们不是Spring Boot特有的)。



@EnableAutoConfiguration注解
这个类级别注解是@EnableAutoConfiguration。这个注解告诉Spring Boot”猜测”将如何配置Spring,它是基于添加的jar依赖。由于spring-boot-starter-web添加了Tomcat和Spring MVC,因此自动配置将假设正在开发一个Web应用程序并相应地设置Spring。

启动器和自动配置(Starters & Auto-Configuration)
自动配置旨在与“Starters”配合使用,但这两个概念不直接绑定。可以自由选择和选择起始者以外的jar依赖,Spring Boot仍将尽力自动配置应用程序。

“main”方法
应用程序的最后一部分是主(main)方法。这只是一个遵循Java约定的应用程序入口点得标准方法。main方法通过调用run来委托Spring Boot SpringApplication类。SpringApplication将引导应用程序,启动Spring,从而启动自动配置Tomcat Web服务器。需要传递Example.class作为run方法的参数来告诉SpringApplication,这是主要的Spring组件。args数组也被传递以暴露任何命令行参数。

运行示例
现在,现在,我们的应用程序应该可以正常运行工作了。由于 POM 中使用了spring-boot-starter-parent,有一个有用的 run 目标,用它来启动应用程序。输入 mvn spring-boot:run 从根项目目录启动应用程序:

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
::Spring Boot:: (v1.4.3.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

如果打开Web浏览器访问 http://localhost:8080 , 应该会看到以下输出:
这里写图片描述
要正常退出应用程序,请按ctrl+c


创建可执行jar


现在,我们来完成一个例子,创建一个完全自包含的可执行jar文件,可以在生产中运行。可执行jar(有时称为“fat jar”)是包含编译的类以及需要运行的所有jar依赖性的代码存档。

可执行jar和Java
Java不提供任何标准方法来加载嵌套的jar文件(即包含在jar中的jar文件)。如果想要分发一个自包含的应用程序,这可能是有问题的。
为了解决这个问题,许多开发人员使用“uber” jar。 一个uber jar简单地将所有类,从所有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>

现在,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.4.3.RELEASE</version>
    </parent>

    <!-- Additional lines to be added here... -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

</project>

POMspring-boot-starter-parent 包括<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:1.4.3.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

target 目录中,应该看到一个myproject-0.0.1-SNAPSHOT.jar文件。文件大小应为10 Mb左右。如果想看里面内容,可以使用jar tvf

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

应该在target目录中看到一个名为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.4.3.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

如果打开Web浏览器访问 http://localhost:8080 , 应该会看到以下输出:
这里写图片描述
和之前一样,要正常退出应用程序,同时按住ctrl+c
到此,第一个 Spring Boot应用程序的开发就结束了。




相关文章:

猜你喜欢

转载自blog.csdn.net/ththcc/article/details/81660779
今日推荐