随着Spring 4新版本的发布,Spring Boot这个新的子项目得到了广泛的关注,因为不管是Spring 4官方发布的新闻稿还是针对首席架构师Adrian Colyer的专访,都对这个子项目所带来的生产率提升赞誉有加。
Spring Boot充分利用了JavaConfig的配置模式以及“约定优于配置”的理念,能够极大的简化基于Spring MVC的Web应用和REST服务开发。
Spring 4倡导微服务的架构,针对这一理念,近来在微博上也有一些有价值的讨论,如这里和这里。微服务架构倡导将功能拆分到离散的服务中,独立地进行部署,Spring Boot能够很方便地将应用打包成独立可运行的JAR包,因此在开发模式上很契合这一理念。目前,Spring Boot依然是0.5.0的里程碑版本,因此相关的文档尚不完善,本文将会以一个简单的样例来介绍基于这个项目的开发过程。
要Spring Boot进行功能开发,需要使用Gradle或者Maven作为构建工具。在本例中,我们会使用Eclipse和Maven插件进行开发。要使用Spring Boot,首先创建一个Maven工程,并修改Maven主要的配置文件pom.xml,如下所示:
<properties> <java.version>1.7</java.version> <start-class>com.test.springboot.Startup</start-class> </properties> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.0.1.RELEASE</version> </parent> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </pluginManagement> </build> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories>
在上面的配置中,需要将工程的parent设置为spring-boot-starter-parent,并添加对spring-boot-starter-web的依赖,这样我们就无需设置各个依赖项及其版本信息了。并且在构建中要声明使用spring-boot-maven-plugin这个插件,它会对Maven打包形成的JAR进行二次修改,最终产生符合我们要求的内容结构。
在我们的应用中将要发布一个REST服务,显示一个基本的用户信息,首先定义一个简单的模型类:
public class User { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
接下来,我们需要声明一个Spring MVC的Controller,响应对实体的请求:
//@EnableAutoConfiguration @RestController @RequestMapping("/user") public class UserController { @RequestMapping("/{id}") public User view(@PathVariable("id") Long id) { User user = new User(); user.setId(id); user.setName("zhang"); return user; } //public static void main(String[] args) { // SpringApplication.run(UserController.class); //} }
这个类与我们在使用Spring MVC定义Controller时并无任何差别。接下来,我们需要声明一个主类启动这个应用程序:
@Configuration @ComponentScan @EnableAutoConfiguration public class Startup { public static void main(String[] args) { SpringApplication app = new SpringApplication(Startup.class); app.setWebEnvironment(true); app.setShowBanner(false); Set<Object> set = new HashSet<Object>(); //set.add("classpath:applicationContext.xml"); app.setSources(set); app.run(args); } }
这个类的main方法中使用了SpringApplication帮助类,并以Application这个类作为配置来启动Spring的应用上下文。在这个类中使用了ComponentScan以及EnableAutoConfiguration注解,其中ComponentScan注解会告知Spring扫描指定的包来初始化Spring Bean,这能够确保我们声明的Bean能够被发现。EnableAutoConfiguration将会启动自动配置模式,在我们的配置中会将对Tomcat的依赖级联进来,因此在应用启动时将会自动启动一个嵌入式的Tomcat,因为在样例中使用了Spring MVC,所以也会自动注册所需的DispatcherServlet,这都不需要类似web.xml这样的配置。
在Eclipse中要运行这个应用的话,可以直接以Java Application的形式来运行这个main函数,此时会启动应用,我们在浏览器中可以看到如下的运行效果,这就是我们想要的REST服务:
在开发调试完成之后,可以将应用打成JAR包的形式,在Eclipse中可以直接使用Maven插件的package命令,最终会形成一个可运行的JAR包。我们使用java –jar命令就可以运行这个JAR包了。Myeclipse的Maven的package请参考(http://mrlee23.iteye.com/blog/2047946 )所呈现出的效果与在调试期是一样的。现在看一下这个JAR包解压后的目录结构:
这个JAR包与传统JAR包的不同之处在于里面有一个名为lib的目录,在这个目录中包含了这个简单应用所依赖的其他JAR包,其中也包含内置的嵌入式Tomcat,正是使用它,才能发布服务和访问Web资源。除了我们编写的源码所编译形成的CLASS以外,在org目录下还有许多Spring所提供的CLASS,正是依赖这些CLASS,才能够加载位于lib目录下JAR中的类。这样的加载机制与在OSGi bundle中声明Bundle-Classpath很类似,不过在OSGi中会由容器来负责加载指定路径下的类。这大致阐述了这样一个JAR包能够发布服务的原因。
如果我们想要使用HTML、JSP等Web资源的话,在Controller中直接返回对应的视图就可以了。
如果我们想要将这个JAR包转换成可以在Servlet容器中部署的WAR的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要声明这样一个类:
public class HelloWebXml extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } }
这个类的作用与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似,只不过在这里不需要编写额外的XML文件了。
如果要将最终的打包形式改为WAR的话,还需要对pom.xml文件进行修改,除了需要将packaging的值修改为war以外,还需要对依赖进行适当的配置(这一部分在Spring Boot的样例和文档中均未提及,提醒大家注意):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
在这里需要移除对嵌入式Tomcat的依赖,这样打出的WAR包中,在lib目录下才不会包含Tomcat相关的JAR包,否则将会出现启动错误。另外,在移除对Tomcat的依赖后,为了保证编译正确,还需要添加对servlet-api的依赖,因此添加如下的配置:
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>7.0.42</version> <scope>provided</scope> </dependency>
在这里将scope属性设置为provided,这样在最终形成的WAR中不会包含这个JAR包,因为Tomcat或Jetty等服务器在运行时将会提供相关的API类。此时,执行mvn package命令就会得到一个WAR文件,我们可以直接将其放到Tomcat下运行(需要7.0.42版本以上)。
以上介绍了基于Spring Boot开发应用的过程,目前它的文档尚不完善,但是在GitHub上有不少的样例,包括与Spring Data集成访问数据库(关系型以及非关系型)、安全、WebSocket等,读者感兴趣可以下载运行。
基于以上的介绍,希望读者能够对Spring Boot这个新项目有所了解。它简化了JAR包管理和相关基础设施环境的配置,能够帮助我们快速开发Web应用或构建REST服务,希望它能够尽快完善成熟,更多地用于实践,提升开发效率。
参考资料
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
https://github.com/spring-projects
相关推荐
通过这种方式,Spring Boot 实现了快速构建和运行 Spring 应用的目标,降低了入门门槛,特别是对于初学者和希望提高开发效率的团队。同时,它遵循了 Spring 社区的最佳实践,确保了应用的稳定性和可维护性。因此,...
8. **安全控制**:通过`spring-boot-starter-security`,Spring Boot提供了基本的安全管理功能,包括身份验证和授权,可以快速搭建安全的Web应用。 9. **测试**:Spring Boot提供了方便的测试支持,包括`@...
内容覆盖了从Spring Boot和Spring MVC基础,到Thymeleaf的深入应用,再到前端JavaScript框架(如jQuery、Bootstrap和Vue.js)的介绍,以及使用Spring Data操作数据库和应用Spring Cloud构建微服务。最后,通过案例将...
"说明.htm"可能是一个简短的使用指南或框架介绍,提供了关于如何构建、运行和测试Spring Boot应用的基本信息。这可能包括如何使用Maven或Gradle初始化项目,配置应用主类,以及如何利用Spring Boot的内嵌Servlet容器...
本书涵盖了Spring Boot的基础知识,如如何创建第一个Spring Boot应用,理解其约定优于配置的原则,以及如何利用starter pom来快速构建项目。读者将学习如何使用Spring Boot的命令行接口(CLI)快速启动项目,以及...
### 使用Spring Boot构建应用程序知识点详解 #### 一、Spring Boot简介 Spring Boot 是一款基于Spring框架的快速应用开发工具包,旨在简化新Spring应用程序的初始搭建以及开发过程。该框架利用一种初始约定优于配置...
- 探索如何使用Spring Boot构建微服务架构。 - 学习如何对Spring Boot应用进行单元测试和集成测试。 ##### 三、使用Spring Boot **13. 构建系统** - **13.1. 依赖管理** - Spring Boot提供了默认的依赖版本管理...
这些内容会详细介绍如何创建Spring Boot项目、如何配置Spring Boot、如何使用Spring Initializr初始化项目、以及如何使用Maven或Gradle构建工具。Spring Boot的配置文件(application.properties或application.yml)...
- 添加所需的起步依赖,例如 `spring-boot-starter-web` 用于构建 Web 应用。 - 编写主类,使用 `@SpringBootApplication` 注解启动 Spring Boot 应用。 - 编写控制器,使用 `@RestController` 注解处理 HTTP 请求。...
本书旨在帮助读者深入理解和掌握Spring Boot 2在实际企业项目中的应用,提升开发效率,实现快速构建高质量的微服务系统。 Spring Boot是Spring框架的扩展,它通过简化配置和自动配置机制,使得开发Spring应用程序变...
在本项目"87_基于spring boot快速构建缓存服务以及商品服务1"中,我们看到的是一个使用Spring Boot框架构建的电商缓存服务。这个服务旨在提高电商平台的商品详情页的加载速度和性能,通过引入缓存机制来降低对数据库...
在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...
5. Spring框架的深入应用,如何在Spring Boot中集成和使用Spring的各个模块。 6. 根据书中明确指出的版权信息,书中内容在复制、存储和传输时需要遵守相关规定。 7. 作者Greg L. Turnquist的技术背景和专业贡献,为...
* Maven/Gradle:Spring Boot 支持 Maven 和 Gradle 两种构建工具,提供了一个灵活的方式来管理依赖项和构建应用程序。 9. Spring Boot 的资源 Spring Boot 的资源包括: * 官方文档:Spring Boot 的官方文档...
这是一个基于Spring Boot框架构建的房地产应用项目,提供了RESTful API接口用于检索房地产数据。该项目包含Spring Boot后端项目和React前端项目。后端服务使用Spring Boot作为开发框架,MongoDB作为数据库。用户可以...
在"Spring Boot 2企业应用实战"这本书中,作者深入浅出地介绍了如何利用Spring Boot 2构建现代的企业级应用。PDF版本提供了清晰的理论讲解和实践示例,而源码则为读者提供了亲手实践的机会,以加深理解。 1. **...
gs-spring-boot, 使用 Spring Boot 构建应用程序 标记项目弹簧引导groovy测试弹簧引导目录你将构建什么。你需要什么。了解你可以使用 Spring Boot 做什么。创建一个简单的网络应用程序。创建一个应用程序类运行应用...
3. Spring Boot Starters:Spring Boot 的starter 依赖关系,提供了快速构建应用程序的功能。 Spring Boot 的配置 1. 属性配置:Spring Boot 支持多种配置方式,例如 properties 文件、YAML 文件和环境变量。 2. ...