小试 Spring Boot - Spring MVC

前阵想试下 Spring MVC 4 有了些什么新特性, 可真正用 Maven 在 IDE 中建立一个项目并不那么容易. Spring 当初在笑 EJB 的笨重时如今把自己也搞大了, 继而出台了一个 Spring Boot 来响应微服务的号召.

Spring Boot 的出世可以大大提升使用 Spring 框架时的开发效率. Spring 尽量简化 Spring 项目的配置, 一个 mvn package 就轻轻松的把一个 Web 项目打成一个  fat jar, 运行 java -jar spring-boot-sample-1.0-SNAPSHOT.jar 就能通过内嵌的 Tomcat 或 Jetty 来启动一个 Web 应用了, 更别提怎么应对普通控制台应用了.

现在就来体验一下 Spring Boot 做一个 Spring MVC 项目有多简单, 我们仍然是建立一个 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>cc.unmi</groupId>
    <artifactId>spring-boot-sample</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.1.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

上面的 pom.xml 配置通过 parent spring-boot-starter-parent 项目和对 spring-boot-starter-web 的依赖把相关的依赖都引入到本项目中来了.

然后是一个基本实现,  SampleController 类

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@SpringBootApplication
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

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

这里的注解 @SpringBootApplication 替换成 @EnableAutoConfiguration 也行, 但是前者更强大, 因为它是后者加上 @Configuration 和 @ComponentScan 的组合.

上面是一个 main 函数, 可以立马在 IDE 中直接运行这个主类, 能够看到控制台输出

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.1.RELEASE)
...........................
2016-10-05 23:21:05.260 INFO 88095 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-10-05 23:21:05.271 INFO 88095 --- [ main] hello.SampleController : Started SampleController in 7.402 seconds (JVM running for 8.102)

访问 http://localhost:8080/, 得到预计的输出

➜ / curl -i http://localhost:8080/
HTTP/1.1 200
X-Application-Context: application
Content-Type: text/plain;charset=UTF-8
Content-Length: 12
Date: Thu, 06 Oct 2016 04:28:14 GMT

Hello World!

其他几种方式运行

  1. 前面提到过, 用 mvn package 生成一个 jar 包, 然后用 java -jar spring-boot-sample-1.0-SNAPSHOT.jar 一样能启动内嵌的 Tomcat
  2. 使用 spring-boot-maven-plugin 插件, 这是开发中最常见的方法, 可以说是 Spring Boot 的标配. 需要在 pom.xml 中添加
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    之后便可以用 mvn spring-boot:run 来启动内嵌 Tomcat; 如果需要 Debug 方式启动 Tomcat, 
      mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

  3. 如果就是想要和从前一样生成一个 WAR 包部署到 Tomcat 里去行吗? 当然没问题, 只要在 pom.xml 中加上项目属性 <packaging>war</packaging>, 这时候再来 mvn package 生成的就是一个 WAR 包了.

上面我们是用 SpringApplication.run(SampleController.class, args) 启动了一个 Controller, 如果是要启动多个 Controller 该如何呢? 写上多个就行啦, 在这里

 public static void mains(String[] args) throws Exception {
     SpringApplication.run(new Object[]{SampleController.class, AnotherController.class}, args);
 }

其他一些便利:

  1. 引入依赖 org.springframework.boot:spring-boot-starter-actuator 可以获得开箱即得的运维支持, 如 /beans 看到所有的 bean, /info 基本信息, 甚至 /shutdown 关闭应用. 可以启动控制台看到相关的路径映射.
  2. 约定的强大的外部化属性支持, 如从命令行参数, 系统属性; 约定位置外的 application.properties 或 application.yaml 文件中读取属性, 注入时只需 @Value("${name}")
  3. /static, /public, /resources 或 /META-INF/resources 目录只默认为静态文件
  4. 还出了 Spring Boot CLI, 在 Mac 下用  bew tap pivotal/tap; brew install springboot 安装, 命令为 spring

链接:

  1. 使用 Spring Boot 快速构建 Spring 框架应用

 

类别: Spring. 标签: , . 阅读(179). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz