`

使用Spring Boot快速构建应用

阅读更多



  随着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

 

  • 描述: 运行效果
  • 大小: 16.2 KB
  • 描述: 压缩包
  • 大小: 76 KB
分享到:
评论
5 楼 wangyudong 2017-11-27  
由Spring Boot实现的微服务需要有比较好的工具去测试RESTful API,很多REST Client是不支持自动化测试RESTful API,也不支持自动生成API文档.
之前习惯用一款名字为 WisdomTool REST Client,支持自动化测试RESTful API,输出精美的测试报告,并且自动生成精美的RESTful API文档。
轻量级的工具,功能却很精悍哦!

https://github.com/wisdomtool/rest-client

Most of REST Client tools do not support automated testing.

Once used a tool called WisdomTool REST Client supports automated testing, output exquisite report, and automatically generating RESTful API document.

Lightweight tool with very powerful features!

https://github.com/wisdomtool/rest-client
4 楼 masuweng 2016-07-27  
<artifactId>maven-compiler-plugin</artifactId>和 <artifactId>spring-boot-maven-plugin</artifactId> 不清楚是怎么回事...望解释..
3 楼 masuweng 2016-07-27  
说明下<start-class>com.test.springboot.Startup</start-class>的必要性
2 楼 masuweng 2016-07-27  
学习了,感谢了
1 楼 wei_chengpei 2014-11-21  
已经学习受用,多谢!

相关推荐

    使用 Spring Boot 快速构建 Spring 框架应用

    通过这种方式,Spring Boot 实现了快速构建和运行 Spring 应用的目标,降低了入门门槛,特别是对于初学者和希望提高开发效率的团队。同时,它遵循了 Spring 社区的最佳实践,确保了应用的稳定性和可维护性。因此,...

    Spring Boot2企业应用实战

    8. **安全控制**:通过`spring-boot-starter-security`,Spring Boot提供了基本的安全管理功能,包括身份验证和授权,可以快速搭建安全的Web应用。 9. **测试**:Spring Boot提供了方便的测试支持,包括`@...

    《Spring Boot 2+Thymeleaf企业应用实战》_杨恩雄.pdf

    内容覆盖了从Spring Boot和Spring MVC基础,到Thymeleaf的深入应用,再到前端JavaScript框架(如jQuery、Bootstrap和Vue.js)的介绍,以及使用Spring Data操作数据库和应用Spring Cloud构建微服务。最后,通过案例将...

    Spring Boot应用开发框架 v2.7.17.zip

    "说明.htm"可能是一个简短的使用指南或框架介绍,提供了关于如何构建、运行和测试Spring Boot应用的基本信息。这可能包括如何使用Maven或Gradle初始化项目,配置应用主类,以及如何利用Spring Boot的内嵌Servlet容器...

    LEARNING SPRING BOOT 3.0 - THIRD EDITION

    本书涵盖了Spring Boot的基础知识,如如何创建第一个Spring Boot应用,理解其约定优于配置的原则,以及如何利用starter pom来快速构建项目。读者将学习如何使用Spring Boot的命令行接口(CLI)快速启动项目,以及...

    使用后端开发框架Spring Boot构建应用程序.pdf

    ### 使用Spring Boot构建应用程序知识点详解 #### 一、Spring Boot简介 Spring Boot 是一款基于Spring框架的快速应用开发工具包,旨在简化新Spring应用程序的初始搭建以及开发过程。该框架利用一种初始约定优于配置...

    十分钟上手spring boot

    - 探索如何使用Spring Boot构建微服务架构。 - 学习如何对Spring Boot应用进行单元测试和集成测试。 ##### 三、使用Spring Boot **13. 构建系统** - **13.1. 依赖管理** - Spring Boot提供了默认的依赖版本管理...

    spring boot资料以及项目

    这些内容会详细介绍如何创建Spring Boot项目、如何配置Spring Boot、如何使用Spring Initializr初始化项目、以及如何使用Maven或Gradle构建工具。Spring Boot的配置文件(application.properties或application.yml)...

    Spring Boot 教程、技术栈示例代码,快速简单上手教程。

    - 添加所需的起步依赖,例如 `spring-boot-starter-web` 用于构建 Web 应用。 - 编写主类,使用 `@SpringBootApplication` 注解启动 Spring Boot 应用。 - 编写控制器,使用 `@RestController` 注解处理 HTTP 请求。...

    Spring Boot 2企业应用实战.rar

    本书旨在帮助读者深入理解和掌握Spring Boot 2在实际企业项目中的应用,提升开发效率,实现快速构建高质量的微服务系统。 Spring Boot是Spring框架的扩展,它通过简化配置和自动配置机制,使得开发Spring应用程序变...

    87_基于spring boot快速构建缓存服务以及商品服务1

    在本项目"87_基于spring boot快速构建缓存服务以及商品服务1"中,我们看到的是一个使用Spring Boot框架构建的电商缓存服务。这个服务旨在提高电商平台的商品详情页的加载速度和性能,通过引入缓存机制来降低对数据库...

    Spring Boot讲义.pdf

    在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...

    learning spring boot 2.0

    5. Spring框架的深入应用,如何在Spring Boot中集成和使用Spring的各个模块。 6. 根据书中明确指出的版权信息,书中内容在复制、存储和传输时需要遵守相关规定。 7. 作者Greg L. Turnquist的技术背景和专业贡献,为...

    Spring Boot参考手册 中文版

    * Maven/Gradle:Spring Boot 支持 Maven 和 Gradle 两种构建工具,提供了一个灵活的方式来管理依赖项和构建应用程序。 9. Spring Boot 的资源 Spring Boot 的资源包括: * 官方文档:Spring Boot 的官方文档...

    基于Spring Boot框架构建的房地产应用项目

    这是一个基于Spring Boot框架构建的房地产应用项目,提供了RESTful API接口用于检索房地产数据。该项目包含Spring Boot后端项目和React前端项目。后端服务使用Spring Boot作为开发框架,MongoDB作为数据库。用户可以...

    Spring Boot 2企业应用实战_pdf和源码

    在"Spring Boot 2企业应用实战"这本书中,作者深入浅出地介绍了如何利用Spring Boot 2构建现代的企业级应用。PDF版本提供了清晰的理论讲解和实践示例,而源码则为读者提供了亲手实践的机会,以加深理解。 1. **...

    gs-spring-boot, 使用 Spring Boot 构建应用程序.zip

    gs-spring-boot, 使用 Spring Boot 构建应用程序 标记项目弹簧引导groovy测试弹簧引导目录你将构建什么。你需要什么。了解你可以使用 Spring Boot 做什么。创建一个简单的网络应用程序。创建一个应用程序类运行应用...

    Spring Boot参考指南(2.0.1)中文版.pdf

    3. Spring Boot Starters:Spring Boot 的starter 依赖关系,提供了快速构建应用程序的功能。 Spring Boot 的配置 1. 属性配置:Spring Boot 支持多种配置方式,例如 properties 文件、YAML 文件和环境变量。 2. ...

Global site tag (gtag.js) - Google Analytics