MENU

Spring Boot 之 Hello World

June 23, 2017 • Read: 591 • Spring

Spring boot 简化了基于 Spring 的应用开发,它为 Spring 以及第三方库提供了开箱即用的设置,减少了复杂配置;提供了内嵌服务器、健康监测等特性;我们可以使用java -jar来启动一个web应用。

本文将完成一个最简单的基于 spring boot 的 web 项目,通过这个项目来熟悉 spring boot 的项目结构;首先,需要安装jdk 1.7+、构建工具mavengradleintellij idea

$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
$ mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: C:\Program Files\apache-maven-3.3.9
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_121\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

创建项目

创建一个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>tech.sheli.xjc</groupId>
    <artifactId>xjc-web-hello</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 继承自Spring Boot的默认parent -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
    </parent>

    <dependencies>
        <!-- 添加Web应用程序的典型依赖项 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- 包作为可执行jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

以上就是个典型的pom.xml文件,继承了spring-boot-starter-parent,它包含了java版本(1.6)、项目编码(UTF-8)、测试框架、spring-boot-maven-plugin等,当然也可以不使用spring-boot-starter-parent,自己配置,具体配置会有单独的文章说明;设置spring-boot-starter-web依赖,也是唯一显示配置的依赖。

运行mvn dependency:tree命令以树形结构查看项目依赖,可以发现包含了spring boot和tomcat相关的依赖;spring boot默认就是以内嵌tomcat服务器启动的。

编写代码

我们需要创建一个包含main方法的类,作为项目启动的入口

package tech.sheli.xjc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

@EnableAutoConfiguration
@ComponentScan
public class Application {
    public static void main(String[] args) {
        //项目入口,启动tomcat服务器
        SpringApplication.run(Application.class, args);
    }
}

@EnableAutoConfiguration注解会根据添加的jar依赖猜测你想如何配置Spring;比如spring-boot-starter-web添加了tomcat和spring MVC,所以auto-configuration将假定你正在开发一个web应用,并对spring进行相应地设置。

@ComponentScan会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service@Repository@Controller

其实,spring boot还提供了@SpringBootApplication注解,通过名字也可以猜出它是用于标注项目入口类的;查看源码可知,@SpringBootApplication包含了@Configuration@EnableAutoConfiguration@ComponentScan

main方法通过调用run ,将业务委托给了Spring Boot的SpringApplication类。SpringApplication将引导我们的应用启动Spring,相应地启动被自动配置的Tomcat服务器。我们需要将Application.class作为参数传递给run方法,以此告诉SpringApplication谁是主要的Spring组件,并传递args数组以暴露所有的命令行参数。

在web包下创建控制器HelloController类,这个就是大家比较熟悉的spring MVC相关的代码了。

package tech.sheli.xjc.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class HelloController {
    @RequestMapping("hello")
    String hello() {
        return "Hello World!";
    }
}

运行项目

现在项目已经编写完毕,使用mvn spring-boot:run命令启动项目,你会看到类似下面的输出

[INFO] --- spring-boot-maven-plugin:1.5.4.RELEASE:run (default-cli) @ xjc-web-hello ---

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.4.RELEASE)

浏览器打开localhost:8080,你应该可以看到如下输出:

Hello World!

最后,我们创建一个可以通过java -jar执行的jar;执行mvn package命令,执行完毕后查看target目录,会发现xjc-web-hello-1.0-SNAPSHOT.jar这个可执行的jar;cd到target目录,执行java -jar xjc-web-hello-1.0-SNAPSHOT.jar命令,会看到同样的运行结果。

Last Modified: July 21, 2019