Spring Boot Document Part II(下)
Part II. Getting started
11. 开发第一个Spirng Boot Application
使用Spring Boot的关键特征开发一个基于JAVA Web的“Hello World”,使用Maven构建该项目。开始之前先检查一下JDK及Maven是否安装。
【start.spring.io可快速构建Spring Boot Project结构】
$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
$ mvn -v Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00) Maven home: /Users/user/tools/apache-maven-3.1.1 Java version: 1.7.0_51, vendor: Oracle Corporation
11.1 创建POM
<?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>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.6.RELEASE</version> </parent> <!-- Additional lines to be added here... --> </project>
可以运行mvn package进行测试(暂时忽略警告“jar will be empty - no content was marked for inclusion!”)
11.2 添加依赖
Spring Boot提供大量的“Starter POMs”便于添加jars,示例中已经使用了parent节点的spring-boot-starter-parent。该节点提供了非常有用的默认的Maven支持
其他“Starter POMs”提供你需要的依赖,如Web项目需要spring-boot-starter-web。
我们可以通过mvn dependency:tree命令打印当前项目的依赖树结构,如添加web之前,可以看到spring-boot-starter-parent没有其他依赖:
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
添加spring-boot-starter-web之后,可以看到web依赖包结构,包含Tomcat web server和Spring Boot。
11.3 编码
添加src/main/java/Example.java:
import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @RestController @EnableAutoConfiguration public class Example { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(Example.class, args); } }
11.3.1 @RestController和 @RequestMapping
@RestController为类型注解,用来提示读代码的人,同时Spring通过该注解加载该类,表明其用来处理web request。
@RequestMapping提供路由信息,表明何种http链接匹配该方法。@RestController告知Spring直接将结果字符串返回给调用者。
【详细信息参考Spring Mvc】
11.3.2 @EnableAutoConfiguration
@EnableAutoConfiguration注解告诉Spring根据你假如的依赖希望如何配置你的程序,因为spring-boot-starter-web依赖配置了Tomcat和Spring MVC,自动配置会假设你要开发一个web应用。
Starter POMs and Auto-Configuration
两者可以协同工作,但是这两个概念却无关。你可以自由选择Starter POMs之外的jar依赖来自动配置应用。
11.3.3 main入口
Java程序的标准入口,通过委托给SpringApplication的run方法,其会自动配置Tomcat Server。
11.4 运行示例
通过命令mvn spring-boot:run来启动spring boot程序。【这里有坑,如果以java -jar直接运行main方法,controller可以访问,但是jsp无法访问】
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.3.6.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
打开浏览器直接访问localhost:8080 可以看到页面显示。
Hello World!
可以使用ctrl -c退出。
11.5 打包
可执行jar包(或“fat jars”)是一系列编译好的class文件及jar依赖的归档。
利用spring-boot-maven-plugin插件来打包,添加至pom.xml
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
运行mvn package打包
$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] .... .. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:1.3.6.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
target目录下生成myproject-0.0.1-SNAPSHOT.jar,大约10M左右。如果你想查看内容,可以执行java tvf解压,有一个myproject-0.0.1-SNAPSHOT.jar.original文件为maven创建被SpringBoot打包之前的源jar包。
通过java -jar命令运行该项目。
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.3.6.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864)