前阵想试下 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 文件内容如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?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 类
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 中直接运行这个主类, 能够看到控制台输出
| 1 2 3 4 5 6 7 8 9 10 |   .   ____          _            __ _ _  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )   '  |____| .__|_| |_|_| |_\__, | / / / /  =========|_|==============|___/=/_/_/_/  :: 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/, 得到预计的输出
| 1 2 3 4 5 6 7 8 | ➜ / 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! | 
其他几种方式运行
- 前面提到过, 用 mvn package生成一个 jar 包, 然后用java -jar spring-boot-sample-1.0-SNAPSHOT.jar一样能启动内嵌的 Tomcat
- 使用 spring-boot-maven-plugin插件, 这是开发中最常见的方法, 可以说是 Spring Boot 的标配. 需要在pom.xml中添加
 12345678<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"
- 如果就是想要和从前一样生成一个 WAR 包部署到 Tomcat 里去行吗? 当然没问题, 只要在 pom.xml中加上项目属性<packaging>war</packaging>, 这时候再来mvn package生成的就是一个 WAR 包了.
上面我们是用 SpringApplication.run(SampleController.class, args) 启动了一个 Controller, 如果是要启动多个 Controller 该如何呢? 写上多个就行啦, 在这里
| 1 2 3 |  public static void mains(String[] args) throws Exception {      SpringApplication.run(new Object[]{SampleController.class, AnotherController.class}, args);  } | 
其他一些便利:
- 引入依赖 org.springframework.boot:spring-boot-starter-actuator 可以获得开箱即得的运维支持, 如 /beans看到所有的 bean,/info基本信息, 甚至/shutdown关闭应用. 可以启动控制台看到相关的路径映射.
- 约定的强大的外部化属性支持, 如从命令行参数, 系统属性; 约定位置外的 application.properties或application.yaml文件中读取属性, 注入时只需@Value("${name}")
- 对 /static,/public,/resources或/META-INF/resources目录只默认为静态文件
- 还出了 Spring Boot CLI, 在 Mac 下用  bew tap pivotal/tap; brew install springboot安装, 命令为spring
链接:
本文链接 https://yanbin.blog/try-spring-boot-spring-mvc/, 来自 隔叶黄莺 Yanbin Blog
[版权声明]  本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
[…] 现在就来体验一下 Spring Boot 做一个 Spring MVC 项目有多简单, 我们仍然是建立一个 Maven 项目, 最简单的 pom.xml 文件内容如下: 阅读全文 >> […]