前阵想试下 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) 进行许可。
[…] 现在就来体验一下 Spring Boot 做一个 Spring MVC 项目有多简单, 我们仍然是建立一个 Maven 项目, 最简单的 pom.xml 文件内容如下: 阅读全文 >> […]