`
wbj0110
  • 浏览: 1602443 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用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,如下所示:

<parent>
       <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>0.5.0.M7</version>
 </parent>
  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring3</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <start-class>com.levin.Application</start-class>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestone</id>
            <url>http://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestone</id>
            <url>http://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

在上面的配置中,需要将工程的parent设置为spring-boot-starter-parent,并添加对spring-boot- starter-web的依赖,这样我们就无需设置各个依赖项及其版本信息了。并且在构建中要声明使用spring-boot-maven-plugin 这个插件,它会对Maven打包形成的JAR进行二次修改,最终产生符合我们要求的内容结构。

在我们的应用中将要发布一个REST服务,显示一个基本的用户信息,首先定义一个简单的模型类:

	
	package com.levin;

public class Person {
	private String name;
	private String email;
	
	public Person(String name, String email) {
		this.name = name;
		this.email = email;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
}

接下来,我们需要声明一个Spring MVC的Controller,响应对实体的请求:

@Controller
public class ShowPersonController {
    @RequestMapping("/showPerson")
    public @ResponseBody Person showPerson() {
        return new Person("levinzhang","levinzhang1981@gmail.com");
    }
}

这个类与我们在使用Spring MVC定义Controller时并无任何差别。接下来,我们需要声明一个主类启动这个应用程序:

@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, 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包了。所呈现出的效果与在调试期是一样的。现在看一下这个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等,读者感兴趣可以下载运行,需要注意的是有些样例中使用的是0.5.0.M6版本,这个版本有问题,运行时会出错,建议手动修改为0.5.0.M7或快照版本。

基于以上的介绍,希望读者能够对Spring Boot这个新项目有所了解。它简化了JAR包管理和相关基础设施环境的配置,能够帮助我们快速开发Web应用或构建REST服务,希望它能够尽快完善成熟,更多地用于实践,提升开发效率。

参考资料

http://projects.spring.io/spring-boot/

http://projects.spring.io/spring-boot/docs/README.html

http://spring.io/guides/gs/spring-boot/

http://spring.io/guides/gs/actuator-service/

http://spring.io/guides/gs/convert-jar-to-war/

分享到:
评论

相关推荐

    使用 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容器...

    十分钟上手spring boot

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

    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 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框架构建的电商缓存服务。这个服务旨在提高电商平台的商品详情页的加载速度和性能,通过引入缓存机制来降低对数据库...

    learning spring boot 2.0

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

    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框架的一部分,专注于批量处理任务,...

    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