SpringBoot实战 之 入门篇

1. SpringBoot 简介

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot 可以轻松创建一个基于 Spring 且独立运行的生产级应用。

2. SpringBoot 安装

SpringBoot 的安装有很多种方式,最简单的一种是直接将 spring-boot-*.jar 等文件添加到工程的 classpath 下,这种你就可以运行并调试你的应用了。如果是企业级应用,推荐使用构建工具来管理项目的依赖,比如:Maven 或者 Gradle 等。对于直接添加 classpath 的方式,这里不做多余的介绍,下面主要描述基于构建工具的安装指导。

2.1. 基于 Maven 的安装

Spring Boot 与 Apache Maven 3.2兼容。如果你还没有安装 Maven,可以按照 maven.apache.org 上的说明进行操作。

Spring Boot 依赖使用 org.springframework.boot 作为 groupId。通常情况下,你的 POM 文件会继承 spring-boot-starter-parent 工程,然后再声明一个或多个 Starters 的依赖。Spring Boot 同时也提供了一个可选的Maven 插件用来生成可执行的 Jar 包。

典型的 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>myproject</artifactId>

    <!-- 继承 Spring Boot 的默认值 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
    </parent>

    <!-- 为 Web 应用添加能用依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- 打包成一个可执行 jar 包 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

提示:
spring-boot-starter-parent 是使用 Spring Boot 的一种比较好的方式,但它并不适用于所有场景。有时,你可能需要继承一个不同的父级 Pom,或者你不喜欢这种默认的配置。你也可以通过声明一个 scope=import 的依赖来使用它:

<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- 从 Spring Boot 导入依赖管理 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2. 基于 Gradle 的安装

相对 Maven 庞大的 XML 配置,我更喜欢 Gradle 多一点,不但简洁而且灵活性也好很多。Spring Boot 与 Gradle(2.9或以上)、Gradle 3兼容。如果你还没有安装 Gradle,你可以按照 www.gradle.org 上的操作说明来进行安装。

典型的 build.gradle 文件:

plugins {
    id 'org.springframework.boot' version '1.5.3.RELEASE'
    id 'java'
}
jar {
    baseName = 'myproject' version = '0.0.1-SNAPSHOT'
}
repositories {
    jcenter()
    maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

3. 创建 HelloWorld 应用

创建一个简单的 Java 类如下:

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Example.class, args);
    }

}

Example 类上的第一个注解 @RestController 是 @Controller 及 @ResponseBody 的组合,表明这是一个控制器,且所有响应数据都会被序列化到响应体里面返回。而方法上的 @RequestMapping 注解会为请求处理提供路由信息。这些注解都是 Spring 的,而不是 Spring Boot 特有的。

类上的第二个注解 @EnableAutoConfiguration 会告诉 Spring Boot 去通过依赖的 Jar 包配置 Spring 工程。因为 spring-boot-starter-web 里面包含有 Tomcat 及 Spring MVC,所以它会认为这是一个 Web 工程,并进行相应的 Spring 配置。

应用的最后一部分是一个 main 方法,它通过调用 SpringApplication 的 run 方法将应用程序委托给 Spring Boot。SpringApplication 将引导我们的应用程序启动 Spring 及自动配置的 Tomcat Web 服务。我们需要将 Example.class 作为一个参数传递给 run 方法来告诉 SpringApplication 它是主要的 Spring 组件。

运行 main 方法后,即可以使用浏览器打开地址 localhost:8080 会得到输出:

Hello World!

4. 代码结构

一般的应用都会使用 域名的反转 + 项目名 作为项目的统一包名前缀。如:com.qchery.funda。在 SpringBoot 的项目中,推荐使用如下布局:

com
 +- qchery
     +- funda
         +- Application.java
         |
         +- entity
         |   +- Customer.java
         |
         +- dao
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

其中,Application.java 文件如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

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

}

一般来说,我们会将 @EnableAutoConfiguration 注解放置在 主类上,也就是上面结构中的 Application.java。它隐式定义了包含某些搜索项的搜索包,例如,如果你正编写一个 JPA 的应用程序,那么带 @EnableAutoConfiguration 注解的类将会被用来搜索带有 @Entity 的类。

而 @ComponentScan 会用来自动扫描相应组件,由于 Application.java 是的根包名下,所以它不需要声明 basePackage 去指定需要扫描的包,默认为根包名,即:com.qchery.funda。

5. Configuration 类

SpringBoot 同时支持 Java-based 配置及 XML 文件配置。但推荐使用 Java-based 形式的配置,如果现在的系统中已经存在一些 XML 形式的配置,建议使用相同效果的 Java-based 配置进行替换,你可以通过搜索 Enable* 来查找对应的 Java-based 配置。

5.1. 导入其它配置

在 SpringBoot 工程里面,我们不需要把所有的配置放置到一个类文件里面。它的 @Import 注解可以帮助我们导入其它的配置类,如果想要导入 XML 形式的配置,可以使用 @ImportResource 注解。另外,还可以使用 @ComponentScan 注解去扫描所有带有 @Configuration 注解的类。

6. 自动化配置

当你在某一个带有 @Configuration 的类里加上 @EnableAutoConfiguration 或 @SpringBootApplication 注解时,SpringBoot 会根据所添加的依赖包自动完成项目配置。例如,如果你在类路径下添加 HSQLDB 的包,但你没有配置任何数据库属性,SpringBoot 会自动配置一个 In-Memory 数据库。其中 @EnableAutoConfiguration 只能添加一个类上,建议将其加在主要的 @Configuration 类上。

6.1. 逐渐替换自动化配置

自动化配置并不是侵入式的,在任何地方你都可以通过自定义配置来替换它。例如,如果你添加自己的数据库配置,那么默认的嵌入式数据库支持将会被退回。如果想要查看自动化配置是否生效,可以在运行程序时,加上 –debug 参数进行查看。

6.2. 禁止特定的自动化配置

当你发现自动化配置不能按自己的意愿进行工作的时候,可以通过 @EnableAutoConfiguration 的 exclude 属性来禁用掉它们。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

7. 使用 @SpringBootApplication 注解

由于大多数情况下,@Configuration,@EnableAutoConfiguration 及 @ComponentScan 注解都是一起使用的。SpringBoot 提供了 @SpringBootApplication 这个更加方便的选择,它等同于前三个注解。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // 等同于 @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {

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

}

项目的 github 地址:https://github.com/qchery/funda

SpringBoot实战(第4版)清晰文字版,第 1 章 入门 ................................................ 1 1.1 Spring 风云再起 ........................................ 1 1.1.1 重新认识 Spring ............................ 2 1.1.2 Spring Boot 精要 ........................... 3 1.1.3 Spring Boot 不是什么 ................... 6 1.2 Spring Boot 入门 ....................................... 6 1.2.1 安装 Spring Boot CLI .................... 7 1.2.2 使用 Spring Initializr 初始化 Spring Boot 项目 .......................... 10 1.3 小结 ......................................................... 18 第 2 章 开发第一个应用程序 .................... 19 2.1 运用 Spring Boot ..................................... 19 2.1.1 查看初始化的 Spring Boot 新项目 .......................................... 21 2.1.2 Spring Boot 项目构建过程 解析 .............................................. 24 2.2 使用起步依赖 .......................................... 27 2.2.1 指定基于功能的依赖 ................... 28 2.2.2 覆盖起步依赖引入的传递依赖 .... 29 2.3 使用自动配置 .......................................... 30 2.3.1 专注于应用程序功能 ................... 31 2.3.2 运行应用程序 .............................. 36 2.3.3 刚刚发生了什么 ........................... 38 2.4 小结 ......................................................... 41 第 3 章 自定义配置 .................................... 42 3.1 覆盖 Spring Boot 自动配置 ..................... 42 3.1.1 保护应用程序 .............................. 43 3.1.2 创建自定义的安全配置 ............... 44 3.1.3 掀开自动配置的神秘面纱 ........... 48 3.2 通过属性文件外置配置 ........................... 49 3.2.1 自动配置微调 .............................. 50 3.2.2 应用程序 Bean 的配置外置 ......... 55 3.2.3 使用 Profile 进行配置 .................. 59 3.3 定制应用程序错误页面 ........................... 62 3.4 小结 ......................................................... 64 第 4 章 测试 ............................................... 66 4.1 集成测试自动配置 .................................. 66 4.2 测试 Web 应用程序 ................................. 68 4.2.1 模拟 Spring MVC ........................ 69 4.2.2 测试 Web 安全 ............................. 72 4.3 测试运行中的应用程序 ........................... 74 4.3.1 用随机端口启动服务器 ............... 75 4.3.2 使用 Selenium 测试 HTML 页面 ............................................. 76 4.4 小结 ......................................................... 78 第 5 章 Groovy 与 Spring Boot CLI ......... 80 5.1 开发 Spring Boot CLI 应用程序 .............. 80 5.1.1 设置 CLI 项目 .............................. 81 5.1.2 通过 Groovy 消除代码噪声 ......... 81 5.1.3 发生了什么 .................................. 85 5.2 获取依赖 .................................................. 86 5.2.1 覆盖默认依赖版本 ....................... 87 5.2.2 添加依赖仓库 .............................. 88 5.3 用 CLI 运行测试 ...................................... 89 5.4 创建可部署的产物 .................................. 91 5.5 小结 ......................................................... 91 第 6 章 在 Spring Boot 中使用 Grails ...... 93 6.1 使用 GORM 进行数据持久化 ................. 93 2 目 录 6.2 使用 Groovy Server Pages 定义视图 ....... 98 6.3 结合 Spring Boot 与 Grails 3 ................. 100 6.3.1 创建新的 Grails 项目 ................. 100 6.3.2 定义领域模型 ............................ 103 6.3.3 开发 Grails 控制器 ..................... 104 6.3.4 创建视图 .................................... 105 6.4 小结 ....................................................... 107 第 7 章 深入 Actuator .............................. 108 7.1 揭秘 Actuator 的端点 ............................ 108 7.1.1 查看配置明细 ............................ 109 7.1.2 运行时度量 ................................ 115 7.1.3 关闭应用程序 ............................ 121 7.1.4 获取应用信息 ............................ 121 7.2 连接 Actuator 的远程 shell .................... 122 7.2.1 查看 autoconfig 报告 ........... 123 7.2.2 列出应用程序的 Bean ............... 124 7.2.3 查看应用程序的度量信息 ......... 124 7.2.4 调用 Actuator 端点 .................... 125 7.3 通过 JMX 监控应用程序 ....................... 126 7.4 定制 Actuator......................................... 128 7.4.1 修改端点 ID ............................... 128 7.4.2 启用和禁用端点 ........................ 129 7.4.3 添加自定义度量信息 ................. 129 7.4.4 创建自定义跟踪仓库 ................. 132 7.4.5 插入自定义健康指示器 ............. 134 7.5 保护 Actuator 端点 ................................ 136 7.6 小结 ....................................................... 138 第 8 章 部署 Spring Boot 应用程序 ........ 139 8.1 衡量多种部署方式 ................................ 139 8.2 部署到应用服务器 ................................ 140 8.2.1 构建 WAR 文件 ......................... 141 8.2.2 创建生产 Profile ........................ 142 8.2.3 开启数据库迁移 ........................ 145 8.3 推上云端 ............................................... 150 8.3.1 部署到 Cloud Foundry ............... 150 8.3.2 部署到 Heroku ........................... 153 8.4 小结 ....................................................... 155 附录 A Spring Boot 开发者工具.............. 157 附录 B Spring Boot 起步依赖 ................. 163 附录 C 配置属性 ...................................... 169 附录 D Spring Boot 依赖 ......................... 202
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值