`

Spring Boot应用开发初探与示例

 
阅读更多

Spring Boot是由Pivotal团队提供的全新Spring开发框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。从它的名字可以看出,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目。它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用。它包含的特性如下:

  • 应用独立运行,对于Web应用直接嵌入应用服务器(Tomcat or Jetty)
  • 根据项目的依赖(Maven or Gradle中定义的依赖)自动配置Spring框架的特性
  • 提供生产环境中的监控功能——性能、应用状态信息等
  • 不会生成繁琐的Java代码以及XML配置文件

在这节课中,我们将对Spring Boot的方方面面进行初步的探索,看看Spring Boot究竟能为我们提供怎样的开发能力。

环境准备

  • 一个称手的文本编辑器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)
  • Java环境(JDK 1.7或以上版本)
  • 构建工具Gradle 2.3

使用Gradle作为项目构建工具

首先创建一个项目目录,在目录中创建一个Gradle项目描述文件build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE"
        classpath "com.github.adrianbk:gradle-jvmsrc-plugin:0.6.1"
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'com.github.adrianbk.jvmsrc'

jvmsrc {
    packageName "tmy"
}

jar {
    baseName = 'spring-boot-guides'
    version =  '1.0.0'
}

repositories {
    jcenter()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}

在这个文件中,使用到了Spring Boot Gradle插件来帮助我们简化一些配置工作:

  • 提供了Spring Boot框架的依赖定义,在dependencies标签中直接使用它们即可(不需要声明版本号)
  • 将应用的代码及所有的依赖打包成一个单独的jar文件
  • 自动搜索main函数并作为jar文件的启动函数,jar文件是一个独立可执行的文件

另外由于Gradle的默认特性——例如源代码放在src/main/java文件夹下,我们引入Gradle JVM Src插件,通过配置:

apply plugin: 'com.github.adrianbk.jvmsrc'

jvmsrc {
    packageName "tmy"
}

并运行gradle createJvmSrcDirssrc/main/java/tmy等目录就被创建出来,省去我们手动创建的麻烦。

Spring Boot能做什么

Spring Boot本身并没有在Spring框架的基础上扩展新功能,它仅仅是提供了一种更加快速构建Spring应用的方式。Spring Boot会在根据类路径上的依赖(也就是Maven或Gradle中定义的依赖)来自动完成配置。例如:

  • 使用Spring MVC开发Web应用,一般需要配置各类Bean(无论是XML还是Java Config),例如DispacherServlet。当Spring Boot应用启动后,如果spring-webmvc依赖在类路径上,Spring Boot会自动把这些配置全部自动添加,并且不生成任何代码。传统的Spring MVC应用运行时还需要Servlet容器,Spring Boot会内嵌一个Tomcat或Jetty来运行应用,这同样也不需要开发者进行任何配置。
  • 如果不想使用Tomcat,而是换成Jetty?没问题,在build.gradle中去掉Tomcat的依赖(默认配置),换成Jetty应用服务器的依赖,除此之外应用代码不需要进行任何改变。
  • 模板引擎Thymeleaf也同样被Spring Boot支持自动发现,以往琐碎的配置如今也变成了1-2行Gradle依赖配置。

提示

Spring Boot不会生成或者修改你的源代码,它仅仅是在应用启动时根据类路径以及应用配置动态的改变Spring应用上下文的配置

简单的Web应用

现在我们创建一个最简单的Web应用:

src/main/java/tmy/Application.java

package tmy;

import java.util.Arrays;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
@SpringBootApplication
public class Application {

    @RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);

        System.out.println("Let's inspect the beans provided by Spring Boot:");

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }

}

@SpringBootApplication是Spring Boot提供的注解,他相当于加上如下注解:

  • @Configuration,表明Application是一个Spring的配置对象,用于配置Spring应用上下文。
  • @EnableAutoConfiguration,Spring Boot会根据类路径(classpath)以及一些属性值来自动完成一些配置行为,例如:开发基于Spring MVC的Web应用,需要在配置中加上@EnableWebMvc直接来激活一些默认的Web配置,一旦Spring Boot发现运行时类路径上包含了 spring-webmvc 依赖,它会自动的完成一个Web应用的基本配置——例如配置DispatcherServlet等等。
  • @ComponenScan告知Spring应用从什么位置去发现Spring构件(@Component@Service@Configuration)等等

运行Web应用

完成上述配置后,运行应用有两种方法:

  • 在IDE中直接运行main方法
  • 通过Gradle打包应用:gradle build,运行:java -jar build/libs/${appname}-{version}.jar

在控制台的输出中会发现如下信息:

Let's inspect the beans provided by Spring Boot:
application
beanNameHandlerMapping
defaultServletHandlerMapping
dispatcherServlet
embeddedServletContainerCustomizerBeanPostProcessor
handlerExceptionResolver
helloController
httpRequestHandlerAdapter
messageSource
mvcContentNegotiationManager
mvcConversionService
mvcValidator
org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$DispatcherServletConfiguration
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedTomcat
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration
org.springframework.boot.context.embedded.properties.ServerProperties
org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration
propertySourcesBinder
propertySourcesPlaceholderConfigurer
requestMappingHandlerAdapter
requestMappingHandlerMapping
resourceHandlerMapping
simpleControllerHandlerAdapter
tomcatEmbeddedServletContainerFactory
viewControllerHandlerMapping

这就是Spring应用上下文中的所有Bean信息,其中有Spring MVC中需要用到的dispatcherServletmvcConversionService,mvcValidator等等悉数在列,而我们并没有进行任何的配置,这也就是Spring Boot完成的工作。

访问浏览器或者使用curl:

$ curl localhost:8080
Greetings from Spring Boot!

添加生产环境特性

虽然没有将应用打成WAR包并放入应用服务器中,但Spring Boot本身是可以应用于生成环境的。为了能够获取生产环境的应用信息,Spring Boot提供了开箱即用的模块Actuator:

compile("org.springframework.boot:spring-boot-starter-actuator")

在添加完这个依赖后并启动应用,会看到多了一些URL Mapping信息:

2015-07-24 12:05:33.440  ... : Mapped "{[/info],methods=[GET],params=[],headers=[],consum...
2015-07-24 12:05:33.441  ... : Mapped "{[/autoconfig],methods=[GET],params=[],headers=[],...
2015-07-24 12:05:33.441  ... : Mapped "{[/mappings],methods=[GET],params=[],headers=[],co...
2015-07-24 12:05:33.442  ... : Mapped "{[/trace],methods=[GET],params=[],headers=[],consu...
2015-07-24 12:05:33.442  ... : Mapped "{[/env/{name:.*}],methods=[GET],params=[],headers=...
2015-07-24 12:05:33.442  ... : Mapped "{[/env],methods=[GET],params=[],headers=[],consume...
2015-07-24 12:05:33.443  ... : Mapped "{[/configprops],methods=[GET],params=[],headers=[]...
2015-07-24 12:05:33.443  ... : Mapped "{[/metrics/{name:.*}],methods=[GET],params=[],head...
2015-07-24 12:05:33.443  ... : Mapped "{[/metrics],methods=[GET],params=[],headers=[],con...
2015-07-24 12:05:33.444  ... : Mapped "{[/health],methods=[GET],params=[],headers=[],cons...
2015-07-24 12:05:33.444  ... : Mapped "{[/dump],methods=[GET],params=[],headers=[],consum...
2015-07-24 12:05:33.445  ... : Mapped "{[/beans],methods=[GET],params=[],headers=[],consu...

通过这些URL我们可以获知Spring应用的运行时信息,例如:

$ curl localhost:8080/health
{"status":"UP"}

Spring Boot Starters

为了能够快速开发各类型的应用以及支持种类繁多的第三方库,Spring Boot提供了大量的starter依赖,引入这些依赖后应用即拥有开箱即用的配置,举例:

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

那么只需要将模板文件放入src/main/resources/templates目录下,即可以正常的编写Spring MVC的Web页面了。

总结

Spring 框架作为目前非常流行的一个 Java 应用开发框架,它所包含的内容是非常繁多的。Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面。要在这些子项目之间进行选择,并快速搭建一个可以运行的应用是比较困难的事情。Spring Boot 的目的在于快速创建可以独立运行的 Spring 应用。通过 Spring Boot 可以根据相应的模板快速创建应用并运行。Spring Boot 可以自动配置 Spring 的各种组件,并不依赖代码生成和 XML 配置文件。Spring Boot 可以大大提升使用 Spring 框架时的开发效率。

 

https://www.tianmaying.com/tutorial/spring-boot-intro

分享到:
评论

相关推荐

    Spring Boot 初探 | 第一篇:第一个Spring Boot程序(示例程序)

    **Spring Boot 初探:构建你的第一个应用** Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、...

    spring 初探

    Spring是Java企业级应用开发中最常用的一个开源框架,由Rod Johnson发起,旨在简化应用程序的开发,提高组件之间的解耦。 首先,Spring框架的核心特性是依赖注入(Dependency Injection,DI),它允许开发者在运行...

    MongoDB初探(二)----使用spring-data配置mongodb

    至于“SpringExample”这个文件,可能是包含了上述步骤的示例代码,用于演示如何在Spring Boot应用中配置和使用MongoDB。如果你有这个项目的源码,可以通过运行和调试它来更好地理解和学习Spring Data MongoDB的用法...

    spring-boot-1

    这个名为"spring-boot-1"的项目很可能是对Spring Boot的初探或者是某个特定版本的示例代码库。虽然没有提供具体的标签,我们可以根据Spring Boot的核心特性来探讨相关的知识点。 1. **Spring Boot基础**: Spring ...

    springboot-helloworld.rar

    比如,"spring-boot-starter-web"提供了Web开发所需的所有依赖,包括Spring MVC、Tomcat等。 7. **健康检查与监控**:SpringBoot还内置了Actuator模块,提供了一组端点来监控和管理应用的健康状况,如"/health"端点...

    pring初探共18页.pdf.zip

    Spring是Java企业级应用开发中最常用的一个框架,它以其依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)为核心理念,大大简化了Java EE应用的开发工作。...

    spring in action 最新

    全书共分为多个部分,覆盖了Spring的核心概念、企业级应用开发以及Web层的实现。 在介绍Spring框架时,书中首先讲解了“控制反转”(Inversion of Control,IoC)和“面向切面编程”(Aspect-Oriented Programming...

    spring 课件下载

    在最后一章,我们将探索Spring的一些高级特性,例如Spring Boot用于快速开发,Spring Cloud用于构建分布式系统,以及Spring Security进行权限控制和安全防护。此外,我们还将学习Spring Integration和Spring Batch...

    spring-cloud-demo-main.zip

    《Spring Cloud Demo初探:构建微服务架构》 在当今的软件开发领域,微服务架构已经成为了一种主流的设计模式,它允许我们将复杂的应用程序拆分为一组小型、独立的服务,每个服务都能独立部署、扩展和更新。Spring ...

    JEECG智能开发平台V3开发的指南.doc

    JEECG智能开发平台V3是一款高效、便捷的企业级应用开发框架,旨在简化开发过程,提高开发效率,降低维护成本。该平台结合了先进的技术与设计理念,为开发者提供了全方位的工具支持,实现了快速原型开发和迭代更新。 ...

    springmvc初探(annotation)

    此外,Spring Boot的引入进一步简化了这些配置,通过自动配置和@SpringBootApplication注解,我们可以快速启动一个具备Spring MVC功能的应用。 对于博文链接(已提供但无法访问),可能包含了作者关于Spring MVC...

    JEECG 快速开发指南

    JEECG就是在这样的背景下诞生的,它融合了当前流行的开源技术,如Spring Boot、MyBatis等,为Java开发提供了全新的解决方案。 **1.2 平台介绍** JEECG智能开发平台集成了代码生成、权限管理、工作流、报表设计等...

    springboothello

    在SpringBoot项目中,主程序类通常包含@SpringBootApplication注解,这个注解会启动Spring Boot的自动配置和Spring应用程序上下文。 创建一个基本的SpringBoot Hello World应用通常涉及以下步骤: 1. **初始化项目...

    springboot项目整合.zip

    springboot学习总结,代码示例 ... 第十五篇:actuator与spring-boot-admin 第十六篇:定时任务详解] 第十七篇:轻松搞定文件上传] 第十八篇:轻松搞定全局异常] 第十九篇:轻松搞定数据验证

    eapp-corp-quick-start-java_后台_

    同时,可能还包含了Spring Boot的自动配置功能,使得开发者能够快速启动并运行应用。 6. **文档和社区支持**:为了方便开发者理解和使用,eapp-corp-quick-start-java很可能提供详尽的文档,包括安装指南、API参考...

Global site tag (gtag.js) - Google Analytics