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 createJvmSrcDirs,src/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中需要用到的dispatcherServlet, mvcConversionService, 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 框架时的开发效率。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot使用@SpringBootTest注解开发单元测试教程

    概述 @SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解.基本用法如下: 1.添加依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.

  • SpringBoot可视化接口开发工具magic-api的简单使用教程

    目录 magic-api简介 使用 在SpringBoot中使用 增删改查 参数验证 结果转换 使用事务 集成Swagger 总结 参考资料 magic-api简介 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller.Service.Dao.Mapper.XML.VO等Java对象. 使用 下面我们来波实战,熟悉下使用magic-api来开发API接口. 在SpringBoot中使用 m

  • 使用springboot开发的第一个web入门程序的实现

    1.新建一个springboot初始化项目 2.输入自己的包名,项目名及jdk版本,再点击Next 3.勾选Spring Web,再点击Next 4.再点击Next,再Finish 默认的项目结构如下图 (1)修改pom.xml文件 完整的pom.xml为: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0&qu

  • Springboot开发OAuth2认证授权与资源服务器操作

    设计并开发一个开放平台. 一.设计: 网关可以 与认证授权服务合在一起,也可以分开. 二.开发与实现: 用Oauth2技术对访问受保护的资源的客户端进行认证与授权. Oauth2技术应用的关键是: 1)服务器对OAuth2客户端进行认证与授权. 2)Token的发放. 3)通过access_token访问受OAuth2保护的资源. 选用的关键技术:Springboot, Spring-security, Spring-security-oauth2. 提供一个简化版,用户.token数据保存在内

  • Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码

    项目介绍 基于Layui的后台管理系统模板,扩展Layui原生UI样式,整合第三方开源组件,提供便捷快速的开发方式,延续LayuiAdmin的设计风格,持续完善的样式与组件的维护,基于异步Ajax的菜单构建,相对完善的多标签页,单标签页的共存,为使用者提供相对完善的开发方案,只为成为更好的轮子,项目不定时更新,建议 Star watch 一份 如果你需要无组件整合 与 示例页面 的基础框架,请前往 Pear Admin Layui 基础版本 项目结构 Pear Admin Layui │ ├─a

  • Spring Boot Web应用开发 CORS 跨域请求支持

    一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等 CORS与JSONP相比 1. JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求. 2. 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理. 3. JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS 浏览器支持情况 Chrome 3+ Firefox 3.5+ Opera 12+ Sa

  • Spring Boot应用开发初探与实例讲解

    Spring Boot是由Pivotal团队提供的全新Spring开发框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 从它的名字可以看出,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目. 它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用. 它包含的特性如下: 应用独立运行,对于Web应用直接嵌入应用服务器(Tomcat or Jetty) 根据项目的依赖(Maven or Gradle中定义的依赖)自动配

  • spring boot+mybatis 多数据源切换(实例讲解)

    由于公司业务划分了多个数据库,开发一个项目会同事调用多个库,经过学习我们采用了注解+aop的方式实现的 1.首先定义一个注解类 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface TargetDataSource { String value();//此处接收的是数据源的名称 } 2.然后建一个配置类,这个在项目启动时会加载数据源,一开始采用了HikariCP,查资料说是最快性能最好的

  • Spring boot + mybatis + orcale实现步骤实例代码讲解

    接着上次的实现, 添加 mybatis 查询 orcale 数据库 第一步: 新建几个必须的包, 结果如下 第二步: 在service包下新建personService.java 根据名字查person方法接口 package com.example.first.service; import com.example.first.entity.Person; public interface personService { Person queryPersonByName(String name

  • Spring编程式和声明式事务实例讲解小结

    Spring事务管理 Spring支持两种方式的事务管理: 编程式事务管理: 通过Transaction Template手动管理事务,实际应用中很少使用, 使用XML配置声明式事务: 推荐使用(代码侵入性最小),实际是通过AOP实现 实现声明式事务的四种方式: 基于 TransactionInterceptor 的声明式事务: Spring 声明式事务的基础,通常也不建议使用这种方式,但是与前面一样,了解这种方式对理解 Spring 声明式事务有很大作用. 基于 TransactionProx

  • string boot 与 自定义interceptor的实例讲解

    前面学习过过滤器, 但是过滤器是针对servlet的, 用在springmvc和spring boot里面, 功能上, 感觉并不是很好用. 那这里来学习一下拦截器. 一. 拦截器的执行顺序 1. 目录 2. 拦截器 拦截器里面, 我加了三个(First,Two,Third), 但是内容都差不多. package org.elvin.boot.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import

  • Spring boot注解@Async线程池实例详解

    这篇文章主要介绍了Spring boot注解@Async线程池实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从Spring3开始提供了@Async注解,该注解可以被标注在方法上,以便异步地调用该方法.调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行. 1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent

  • Spring Boot拦截器和过滤器实例解析

    这篇文章主要介绍了Spring Boot拦截器和过滤器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.拦截器与过滤器 在讲Spring boot之前,我们先了解一下过滤器和拦截器.这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的.在分析两者的区别之前,我们先理解一下AOP的概念,AOP不是一种具体的技术,而是一种编程思想.在面向对象编程的过程中,我们很容易通过继承.多态来解决纵向扩展. 但是对于横向的功能,比如,在所

  • Spring Boot整合tk.mybatis代码实例

    这篇文章主要介绍了Spring Boot整合tk.mybatis代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概述 tk.mybatis 是在 MyBatis 框架的基础上提供了很多工具,让开发更加高效 引入依赖 在 pom.xml 文件中引入 mapper-spring-boot-starter 依赖,该依赖会自动引入 MyBaits 相关依赖 <dependency> <groupId>tk.mybatis</

  • spring boot集成redis基础入门实例详解

    目录 redis redis和spring boot spring boot集成redis redis使用 redis在spring boot中存取数据 set写入数据 get读取数据 模拟接口请求读取redis中的数据 总结 redis 支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储. 可以进行master-slave模式的数据备份 更多redis相关文档请查看 redis官方文档 redis和spring boot redis

  • Spring的连接数据库以及JDBC模板(实例讲解)

    前言 今天介绍的是关于Spring的数据库连接以及Jdbc模板的相关API方法,虽然在学习了hibernate之后,会知道实现数据库连接一般都是使用hibernate等持久化框架来实现的.但是,很多时候一些涉及到事务的东西使用这些框架并不能够实现,所以我们还需要结合spring来实现相关的需要. 一.创建工程.导包 要想使用Spring的jdbc模板前,还需要导入相关的jar包: 二.进行相关的bean的创建以及工具类的编写 2.1在数据库中创建了两张表,使用spring的jdbcTemplat

随机推荐