Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以”即时运行“的应用和服务。支持约定大于配置,目的是尽可能快地构建和运行Spring应用。
之前我们创建基于Spring的项目需要考虑添加哪些Spring依赖和第三方的依赖。使用Spring Boot后,我们可以以最小化的依赖开始spring应用。大多数Spring Boot应用需要很少的配置即可运行,比如我们可以创建独立独立大Java应用,然后通过java -jar运行启动或者传统的WAR部署。其也提供了命令行工具来直接运行Spring脚本(如groovy脚本)。也就是说Spring Boot让Spring应用从配置到运行变的更加简单,但不对Spring本身提供增强(即额外的功能)。
目的:
让所有Spring开发变得更快,且让更多的人更快的进行Spring入门体验,提供“starter” POM来简化我们的Maven配置(也就是说使用Spring Boot只有配合maven/gradle等这种依赖管理工具才能发挥它的能力),不像以前,构建一个springmvc项目需要进行好多配置等
开箱即用,快速开始需求开发而不被其他方面影响(如果可能会自动配置Spring)
提供一些非功能性的常见的大型项目类特性(如内嵌服务器、安全、度量、健康检查、外部化配置),如可以直接地内嵌Tomcat/Jetty(不需要单独去部署war包)
绝无代码生成,且无需XML配置
我的构建环境
JDK 7
Maven 3
Servlet3容器
创建项目
首先使用Maven创建一个普通Maven应用即可,不必是web的。
添加Spring Boot相关POM配置
在pom.xml中添加如下配置
1. <!-- Inherit defaults from Spring Boot -->
2. <parent>
3. <groupId>org.springframework.boot</groupId>
4. <artifactId>spring-boot-starter-parent</artifactId>
5. 0.5.0.BUILD-SNAPSHOT</version>
6. </parent>
7.
8. <!-- Add typical dependencies for a web application -->
9. <dependencies>
10. <dependency>
11. <groupId>org.springframework.boot</groupId>
12. <artifactId>spring-boot-starter-web</artifactId>
13. </dependency>
14. </dependencies>
15.
16. <!-- Package as an executable JAR -->
17. <build>
18. <plugins>
19. <plugin>
20. <groupId>org.springframework.boot</groupId>
21. <artifactId>spring-boot-maven-plugin</artifactId>
22. </plugin>
23. </plugins>
24. </build>
25.
26. <!-- Allow access to Spring milestones and snapshots -->
27. <!-- (you don't need this if you are using anything after 0.5.0.RELEASE) -->
28. <repositories>
29. <repository>
30. <id>spring-snapshots</id>
31. //repo.spring.io/snapshot</url>
32. true</enabled></snapshots>
33. </repository>
34. <repository>
35. <id>spring-milestones</id>
36. //repo.spring.io/milestone</url>
37. true</enabled></snapshots>
38. </repository>
39. </repositories>
40. <pluginRepositories>
41. <pluginRepository>
42. <id>spring-snapshots</id>
43. //repo.spring.io/snapshot</url>
44. </pluginRepository>
45. <pluginRepository>
46. <id>spring-milestones</id>
47. //repo.spring.io/milestone</url>
48. </pluginRepository>
49. </pluginRepositories>
继承spring-boot-starter-parent后我们可以继承一些默认的依赖,这样就无需添加一堆相应的依赖,把依赖配置最小化;spring-boot-starter-web提供了对web的支持,spring-boot-maven-plugin提供了直接运行项目的插件,我们可以直接mvn spring-boot:run运行。
实体
1. package com.sishuok.entity;
2.
3. /**
4. * <p>User: Zhang Kaitao
5. * <p>Date: 13-12-22
6. * <p>Version: 1.0
7. */
8. public class User {
9. private Long id;
10. private String name;
11.
12. public Long getId() {
13. return id;
14. }
15.
16. public void setId(Long id) {
17. this.id = id;
18. }
19.
20. public String getName() {
21. return name;
22. }
23.
24. public void setName(String name) {
25. this.name = name;
26. }
27.
28. @Override
29. public boolean equals(Object o) {
30. if (this == o) return true;
31. if (o == null || getClass() != o.getClass()) return false;
32.
33. User user = (User) o;
34.
35. if (id != null ? !id.equals(user.id) : user.id != null) return false;
36.
37. return true;
38. }
39.
40. @Override
41. public int hashCode() {
42. return id != null ? id.hashCode() : 0;
43. }
44. }
控制器
1. package com.sishuok.controller;
2.
3. import com.sishuok.entity.User;
4. import org.springframework.boot.SpringApplication;
5. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
6. import org.springframework.web.bind.annotation.PathVariable;
7. import org.springframework.web.bind.annotation.RequestMapping;
8. import org.springframework.web.bind.annotation.RestController;
9.
10. /**
11. * <p>User: Zhang Kaitao
12. * <p>Date: 13-12-22
13. * <p>Version: 1.0
14. */
15. //@EnableAutoConfiguration
16. @RestController
17. @RequestMapping("/user")
18. public class UserController {
19.
20. @RequestMapping("/{id}")
21. public User view(@PathVariable("id") Long id) {
22. new User();
23. user.setId(id);
24. "zhang");
25. return user;
26. }
27.
28. //public static void main(String[] args) {
29. // SpringApplication.run(UserController.class);
30. //}
31.
32. }
运行
第一种方式
通过在UserController中加上@EnableAutoConfiguration开启自动配置,然后通过SpringApplication.run(UserController.class);运行这个控制器;这种方式只运行一个控制器比较方便;
第二种方式
通过@Configuration+@ComponentScan开启注解扫描并自动注册相应的注解Bean
1. package com.sishuok;
2.
3. import com.sishuok.controller.UserController;
4. import org.springframework.boot.SpringApplication;
5. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
6. import org.springframework.context.annotation.ComponentScan;
7. import org.springframework.context.annotation.Configuration;
8.
9. /**
10. * <p>User: Zhang Kaitao
11. * <p>Date: 13-12-22
12. * <p>Version: 1.0
13. */
14. @Configuration
15. @ComponentScan
16. @EnableAutoConfiguration
17. public class Application {
18. public static void main(String[] args) {
19. class);
20. }
21. }
到此,一个基本的REST风格的web应用就构建完成了。
地址栏输入http://localhost:8080/user/1即可看到json结果。
如果大家查看其依赖,会发现自动添加了需要相应的依赖(不管你用/不用),但是开发一个应用确实变得非常快速,对于想学习/体验Spring的新手,快速建立项目模型等可以考虑用这种方式。当然如果不想依赖这么多的jar包,可以去掉parent,然后自己添加依赖。
参考
https://github.com/spring-projects/spring-boot