十分钟系列-spring-boot精要

转载自:http://generalcode.cn/archives/225

Spring Boot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。

  自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。

  起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。

  命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,

无需传统项目构建。

  Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。

每一个特性都在通过自己的方式简化Spring应用程序的开发。本书会探寻如何将它们发挥到 极致,但就目前而言,先简单看看它们都提供了哪些功能吧。

1. 自动配置

在任何Spring应用程序的源代码里,你都会找到Java配置或XML配置(抑或两者皆有),它们 为应用程序开启了特定的特性和功能。举个例子,如果你写过用JDBC访问关系型数据库的应用 程序,那你一定在Spring应用程序上下文里配置过JdbcTemplate这个Bean。我打赌那段配置看 起来是这样的:

@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
    return new JdbcTemplate(dataSource);
}

这段非常简单的Bean声明创建了一个JdbcTemplate的实例,注入了一个DataSource依赖。当 然,这意味着你还需要配置一个DataSource的Bean,这样才能满足依赖。假设你将配置一个嵌 入式H2数据库作为DataSource Bean,完成这个配置场景的代码大概是这样的:

@Bean
Public DataSource dataSource(){
     return new EmbeddedDatabaseBuilder()

.setType(EmbeddedDatabaseType.H2)

.addScripts(‘schema.sql’, ‘data.sql’)

.build();
}

这个Bean配置方法创建了一个嵌入式数据库,并指定在该数据库上执行两段SQL脚本。build()方法返回了一个指向该数据库的引用。

这两个Bean配置方法都不复杂,也不是很长,但它们只是典型Spring应用程序配置的一小部 分。除此之外,还有无数Spring应用程序有着完全相同的方法。所有需要用到嵌入式数据库和JdbcTemplate的应用程序都会用到那些方法。简而言之,这就是一个样板配置。

 既然它如此常见,那为什么还要你去写呢?

Spring Boot会为这些常见配置场景进行自动配置。如果Spring Boot在应用程序的Classpath里 发现H2数据库的库,那么它就自动配置一个嵌入式H2数据库。如果在Classpath里发现JdbcTemplate,那么它还会为你配置一个JdbcTemplate的Bean。你无需操心那些Bean的配置,Spring Boot会做好准备,随时都能将其注入到你的Bean里。

Spring Boot的自动配置远不止嵌入式数据库和JdbcTemplate,它有大把的办法帮你减轻配 置负担,这些自动配置涉及Java持久化API(Java Persistence API,JPA)、Thymeleaf模板、安全和Spring MVC。第2章会深入讨论自动配置这个话题。

2. 起步依赖

向项目中添加依赖是件富有挑战的事。你需要什么库?它的Group和Artifact是什么?你需要 哪个版本?哪个版本不会和项目中的其他依赖发生冲突?

Spring Boot通过起步依赖为项目的依赖管理提供帮助。起步依赖其实就是特殊的Maven依 赖和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制 的依赖。

举个例子,假设你正在用Spring MVC构造一个REST API,并将JSON(JavaScript Object Notation)作为资源表述。此外,你还想运用遵循JSR-303规范的声明式校验,并使用嵌入式的Tomcat服务器来提供服务。要实现以上目标,你在Maven或Gradle里至少需要以下8个依赖:

 org.springframework:spring-core

 org.springframework:spring-web

 org.springframework:spring-webmvc

 com.fasterxml.jackson.core:jackson-databind org.hibernate:hibernate-validator

 org.apache.tomcat.embed:tomcat-embed-core

 org.apache.tomcat.embed:tomcat-embed-el

 org.apache.tomcat.embed:tomcat-embed-logging-juli

不过,如果打算利用Spring Boot的起步依赖,你只需添加Spring Boot的Web起步依赖 (org.springframework.boot:spring-boot-starter-web)1,仅此一个。它会根据依赖

传递把其他所需依赖引入项目里,你都不用考虑它们。 比起减少依赖数量,起步依赖还引入了一些微妙的变化。向项目中添加了Web起步依赖,实

际上指定了应用程序所需的一类功能。因为应用是个Web应用程序,所以加入了Web起步依赖。 与之类似,如果应用程序要用到JPA持久化,那么就可以加入jpa起步依赖。如果需要安全功能, 那就加入security起步依赖。简而言之,你不再需要考虑支持某种功能要用什么库了,引入相关起 步依赖就行。

此外,Spring Boot的起步依赖还把你从“需要这些库的哪些版本”这个问题里解放了出来。 起步依赖引入的库的版本都是经过测试的,因此你可以完全放心,它们之间不会出现不兼容的 情况。

3. 命令行界面

除了自动配置和起步依赖,Spring Boot还提供了一种很有意思的新方法,可以快速开发Spring。

Spring Boot CLI是Spring Boot的非必要组成部分。虽然它为Spring带来了惊人的力量,大大 简化了开发,但也引入了一套不太常规的开发模型。要是这种开发模型与你的口味相去甚远,那也没关系,抛开CLI,你还是可以利用Spring Boot提供的其他东西。

4. Actuator

Spring Boot的最后一块“拼图”是Actuator,其他几个部分旨在简化Spring开发,而Actuator则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就能窥探应用程序的内部情况 7了,包括如下细节:

 Spring应用程序上下文里配置的Bean

 Spring Boot的自动配置做的决策

 应用程序取到的环境变量、系统属性、配置属性和命令行参数

 应用程序里线程的当前状态

 应用程序最近处理过的HTTP请求的追踪情况

 各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标

Actuator通过Web端点和shell界面向外界提供信息。如果要借助shell界面,你可以打开SSH(Secure Shell),登入运行中的应用程序,发送指令查看它的情况。

因为Spring Boot实在是太惊艳了,所以过去一年多的时间里有不少和它相关的言论。原先听 到或看到的东西可能给你造成了一些误解,继续学习本书前应该先澄清这些误会。

首先,Spring Boot不是应用服务器。这个误解是这样产生的:Spring Boot可以把Web应用程 序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。Spring Boot在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),以此实现这一功能。但这是 内嵌的Servlet容器提供的功能,不是Spring Boot实现的。

与之类似,Spring Boot也没有实现诸如JPA或JMS(Java Message Service,Java消息服务)之 类的企业级Java规范。它的确支持不少企业级Java规范,但是要在Spring里自动配置支持那些特 性的Bean。例如,Spring Boot没有实现JPA,不过它自动配置了某个JPA实现(比如Hibernate)的Bean,以此支持JPA。

最后,Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性, 以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。

简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置。谢天谢地,幸好有Spring,你不用再写这些样板配置了,可以专注于应用程序的逻辑, 这些才是应用程序独一无二的东西。

现在,你应该对Spring Boot有了大概的认识,是时候构建你的第一个Spring Boot应用程序了。 先从重要的事情开始,该怎么入手呢?



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值