spring boot搭建简单的web服务


早就听说过springboot快速构建服务的大名了,可惜一直不敢去花时间尝试,而且最近老是干运维的工作都快忘了本职java开发了。刚好这回公司要我做一个纯前端应用的后端服务(听起来咋这么绕口,说简单点就是vuejs做前端展示,java做后台服务)借着这个机会赶紧把spring boot用起来,作为使用过程在此一一记录以备需要时回看。

spring boot主要优点:
1. 快速搭建常用框架
2. 几乎没有任何xml配置文件
3. 自动下载各种依耐以及自带各种默认配置

基于maven搭建spring boot应用

访问:http://start.spring.io/ , 通过spring 初始化工具自动生成项目

简单的springboot服务 一个页面 springboot web服务器_jar

输入 group 和artifact之后点击 generate project会下载一个zip包
解压zip包如下图

简单的springboot服务 一个页面 springboot web服务器_spring_02

用编辑器打开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>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
        <relativePath/> 
        <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

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

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


</project>

此处可以看到默认已经添加了两个依耐 spring-boot-starter 和spring-boot-starter-test
其中
spring-boot-starter是核心依耐,包括整个应用自动配置支持,日志和YAML
spring-boot-starter-test是对常用测试依赖的支持,包括JUnit, Hamcrest和Mockito,还有spring-test模块

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

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

我们的目标是创建一个简单的web应用,所以我们需要添加一堆spring mvc的依耐,但是–spring boot的优势就是简化操作,此处我们只需要添加spring-boot-starter-web即可构建一个web应用添加后的pom

<!-- 核心模块,包括自动配置支持、日志和YAML -->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
   </dependency>

   <!-- 测试模块,包括JUnit、Hamcrest、Mockito -->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>

   <!-- 引入Web模块 -->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

添加HelloWorld服务

既然web服务搭建起来了,我们理所当然的要编写万年不变的helloworld服务了(我也记不起来写过多少版本的helloworld了)spring-boot-start-web支持注解,所以我们不需要再去写spring mvc那复杂的mapping文件了

我们在src/main/java/com/example下创建HelloController.java文件,代码如下

package com.example;

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

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

好了,我们的web应用就配置完成了,通过命令行进入demo根目录,输入一下命令(需要有java环境和maven环境)

mvn clean install
-------------------------------
INFO] 
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ demo ---
[INFO] Building jar: /Users/liduote/Downloads/demo/target/demo-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) @ demo ---
[INFO] 
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ demo ---
[INFO] Installing /Users/liduote/Downloads/demo/target/demo-0.0.1-SNAPSHOT.jar to /Users/liduote/.m2/repository/com/example/demo/0.0.1-SNAPSHOT/demo-0.0.1-SNAPSHOT.jar
[INFO] Installing /Users/liduote/Downloads/demo/pom.xml to /Users/liduote/.m2/repository/com/example/demo/0.0.1-SNAPSHOT/demo-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.270s
[INFO] Finished at: Fri Mar 17 17:57:48 CST 2017
[INFO] Final Memory: 28M/283M
[INFO] ------------------------------------------------------------------------

如上则构建完成,进入demo/target目录可以看到目标应用demo-0.0.1-SNAPSHOT.jar
输入以下命令即可启动应用了

java -jar demo-0.0.1-SNAPSHOT.jar

在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢?
1. 方便微服务部署。
2. 方便项目启动,不需要下载Tomcat或者Jetty

所以在应用启动成功后直接在浏览器里访问http://localhost:8080/hello即可看到我们熟悉的HelloWorld了

简单的springboot服务 一个页面 springboot web服务器_spring_03