怎么用idea打开一个mvn spring boot项目_开发第一个 Spring Boot 应用

ca453357ca006b3c744e2232f891dce2.png

让我们使用 Java 开发一个简单的 Hello World! web 应用程序,以便体现 Spring Boot 的一些关键特性。我们将使用 Maven 构建该项目,因为大多数 IDE 都支持它。

提示

spring.io 网站上有许多使用 Spring Boot 的 入门指南,如果您正在寻找具体问题的解决方案,可先从上面寻找。您可以到 start.spring.io 使用依赖搜索功能选择 web starter 来快速完成以下步骤。它将自动生成一个新的项目结构,以便您可以立即开始编码。查看文档了解更多信息。

在开始之前,打开终端检查您是否安装了符合要求的 Java 版本和 Maven 版本。

$ java -version
java 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 -v
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00)
Maven home: /Users/user/tools/apache-maven-3.1.1
Java version: 1.7.0_51, vendor: Oracle Corporation

提示

此示例需要在您自己的文件夹中创建,后续的步骤说明假设您已经创建了这个文件夹,它是您的 当前目录

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 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.9.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 支持)。为了简单起见,我们将继续在这个例子中使用纯文本编辑器。

2、添加 Classpath 依赖

Spring Boot 提供了多个 “Starter”,可以让您方便地将 jar 添加到 classpath 下。我们的示例应用已经在 POM 的 parent 部分使用了 spring-boot-starter-parentspring-boot-starter-parent 是一个特殊 Starter,它提供了有用的 Maven 默认配置。此外它还提供了依赖管理功能,您可以忽略这些依赖的版本(version)标签。

其他 Starter 只提供在开发特定应用时可能需要到的依赖。由于我们正在开发一个 web 应用,因此我们将添加一个 spring-boot-starter-web 依赖 , 但在此之前,让我们来看看目前拥有的。

mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

mvn dependency:tree 命令以树的形式打印项目的依赖。您可以看到 spring-boot-starter-parent 本身不提供依赖。我们可以在 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 web 服务器和 Spring Boot 本身。

3、编码

要完成我们的应用,我们需要创建一个 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);
    }

}

虽然没有多少代码,但它仍然做了很多事情。让我们看看里面重要的部分。

3.1、@RestController 与 @RequestMapping 注解

Example 类中的第一个注解是 @RestController,该注解被称作 stereotype 注解。它能为代码阅读者提供一些提示,对于 Spring 而言,这个类具有特殊作用。在本示例中,我们的类是一个 web @Controller,因此 Spring 在处理传入的 web 请求时会考虑它。

@RequestMapping 注解提供了 routing(路由)信息。它告诉 Spring,任何具有路径为 / 的 HTTP 请求都应映射到 home 方法。@RestController 注解告知 Spring 渲染结果字符串直接返回给调用者。

提示

@RestController@RequestMapping 是 Spring MVC 注解(它们不是 Spring Boot 特有的)。有关更多详细信息,请参阅 Spring 参考文档中的 MVC 章节

3.2、@EnableAutoConfiguration 注解

第二个类级别注解是 @EnableAutoConfiguration。此注解告知 Spring Boot 根据您添加的 jar 依赖来“猜测”您想如何配置 Spring 并进行自动配置,由于 spring-boot-starter-web 添加了 Tomcat 和 Spring MVC,auto-configuration(自动配置)将假定您要开发 web 应用并相应设置了 Spring。

Starter 与自动配置 Auto-configuration 被设计与 Starter 配合使用,但这两个概念并不是直接相关的。您可以自由选择 starter 之外的 jar 依赖,Spring Boot 仍然会自动配置您的应用程序。

3.3、main 方法

应用的最后一部分是 main 方法。这只是一个标准方法,其遵循 Java 规范中定义的应用程序入口点。我们的 main 方法通过调用 run 来委托 Spring Boot 的 SpringApplication 类,SpringApplication 类将引导我们的应用,启动 Spring,然后启动自动配置的 Tomcat web 服务器。我们需要将 Example.class作为一个参数传递给 run 方法来告知 SpringApplication,它是 Spring 主组件。同时还传递 args 数组以暴露所有命令行参数。

4、运行示例

此时,我们的应用应该是可以工作了。由于您使用了 spring-boot-starter-parent POM,因此您可以使用 run 来启动应用程序。在根目录下输入 mvn spring-boot:run 以启动应用:

$ mvn spring-boot:run

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

如果您用浏览器打开了 localhost:8080,您应该会看到以下输出:

Hello World!

要平滑退出程序,请按 ctrl+c

5、创建可执行 jar

我们通过创建一个完全自包含(self-contained)的可执行 jar 文件完成了示例。该 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.0.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 的较小文件。这是在 Spring Boot 重新打包之前由 Maven 所创建的原始 jar 文件。

使用 java -jar 命令运行该应用:

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

  .   ____          _            __ _ _
 / / ___'_ __ _ _(_)_ __  __ _    
( ( )___ | '_ | '_| | '_ / _` |    
 /  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |___, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.0.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

跟之前一样, 要平滑退出应用,请按 ctrl-c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值