什么是 Spring Boot



Spring Boot是Spring团队设计用来简化Spring应用的搭建和开发过程的框架。该框架对第三方库进行了简单的默认配置,通过Spring Boot构建的应用程序只需很少的Spring配置即可快速的运行起来。

使用 Spring Boot 好处

简单、快速、便捷。

搭建普通Spring Web项目项目的一般流程:

  1. 配置web.xml,整合Spring和SpringMvc
  2. 整合Spring和Mybatis,配置Spring事务
  3. 配置日志文件
  4. 部署Tomcat调试

.......

一系列的配置过程繁杂,很容易遗漏掉,即便是随便搭建一个简单的爬取某个页面的邮箱存入数据库的小项目,都要从头到尾的将配置流程走一遍。

如果使用Spring Boot,配置则简化了很多,只需要引入响应的几个maven依赖,进行简单的几个配置就可以快速方便的搭建一个Web项目。

开启Spring Boot之旅

线上构建

  1. 访问http://start.spring.io
  2. 选择Maven Project、Java、Spring Boot 2.1.9构建,点击Generate生成对应的文件。项目信息简单配置。



    备注:

Dependencies处可通过添加相应的依赖,在生成项目文件时就会自动添加,比如,如果我们要做Web开发,只要在依赖里添加Web即可。

  1. MyEclipse,Import -> Existing Maven Projects -> Next -> 选择解压后的文件夹 -> Finsh!

通过Myeclipse构建项目

  1. File -> New -> Spring Starter Project新建项目

  2. 配置项目相关基本信息

  3. 选择依赖,比如Spring Web

  4. Finish OK,Spring Boot项目构建完成。

Tips:

导入或者Myeclipse构建项目有可能会出现pom.xml文件首行出现错误:Unknown pom.xml /demo line 1 Maven Configuration Problem。

解决方案

在pom文件中的节点中加入<maven-jar-plugin.version>3.0.0</maven-jar-plugin.version>然后右键项目进入Maven>Update Project...菜单点击,即可

项目结构解析



Spring Boot 的基础结构共三个文件:

  • src/main/java 程序开发以及主程序入口:Application
  • src/main/resources 配置文件存放位置:application.properties
  • src/test/java 测试入口:ApplicationTests
  1. 在Application 右键run启动Spring Boot项目

生成的ApplicationApplicationTests类都可以直接运行来启动当前创建的项目,由于目前该项目未配合任何数据访问或Web模块,程序会在加载完Spring之后结束运行。

Web开发

默认Tomcat启动项目

spring-boot-starter-parent指定了当前项目为一个Spring Boot项目,它提供了诸多的默认Maven依赖。

Spring Boot提供了许多开箱即用的依赖模块,这些模块都是以spring-boot-starter-XX命名的。比如要开启Spring Boot的web功能,只需要在pom.xml中配置spring-boot-starter-web即可:

  1. pom.xml中添加支持web的模块
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

因为其依赖于spring-boot-starter-parent,所以这里可以不用配置version。

pom.xml 文件中默认有两个模块:

  • spring-boot-starter :核心模块,包括自动配置支持、日志和 YAML,如果引入了 spring-boot-starter-web web 模块可以去掉此配置,因为 spring-boot-starter-web 自动依赖了 spring-boot-starter
  • spring-boot-starter-test :测试模块,包括 JUnit、Hamcrest、Mockito。
  1. 编写Controller层
package com.w3cjava.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloWorldController {
@RequestMapping("/hello")
public String index() {
return "Hello World";
}
}

@RestController 相当于Spring中的@Controller和@ResponseBody组合使用的,直接以 json 格式输出。

  1. 启动主程序,打开浏览器访问http://localhost:8080/hello 结果界面如下,你已经可以愉快的开发Web项目了。

配置Jetty启动项目

  1. 在pom.xml文件中找到spring-boot-starter-web,在其依赖中排除tomcat依赖
<!-- 支持web的模块依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除tomcat依赖 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
  1. 添加jetty依赖
<!-- jetty依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
  1. 启动项目主程序,可见tomcat已经替换为jetty了。

  2. 访问 http://localhost:8080/hello 页面结果显示正常。

单元测试

模拟对 http://localhost:8080/hello 发送请求测试

package com.w3cjava;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders; import com.w3cjava.controller.HelloWorldController; @RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests { private MockMvc mvc; @Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
} @Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Hello World")));
}
}

热部署

  1. 添加spring-boot-devtools依赖
<!-- 热部署依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
  1. 启动主程序
  2. 在HelloWorldController中添加新的映射方法
@RequestMapping("/hello1")
public String index1() {
return "Hello World1";
}
  1. 直接访问 http://localhost:8080/hello1 正常

spring-boot-maven-plugin插件

spring-boot-maven-plugin:能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven操作的可能。

Spring Boot Maven plugin的5个Goals

  • spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin
  • spring-boot:run,运行Spring Boot应用
  • spring-boot:start,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
  • spring-boot:stop,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
  • spring-boot:build-info,生成Actuator使用的构建信息文件build-info.properties

小结

总体上而言,通过Spring Boot可以快速构建项目,如果需要使用某个特定的功能,只要添加对应的依赖及简单配置项即可。

源码:01.Spring-Boot-Demo

欢迎扫面下列二维码关注“余弦的自留地”公众微信号

万物之中,希望至美

SpringBoot:1.开启SpringBoot之旅的更多相关文章

  1. SpringBoot:2.SpringBoot整合Thymeleaf模板引擎渲染web视图

    在Web开发过程中,Spring Boot可以通过@RestController来返回json数据,那如何渲染Web页面?Spring Boot提供了多种默认渲染html的模板引擎,主要有以下几种: ...

  2. 【SpringBoot】 理解SpringBoot的启动原理

    前言 前文已经介绍了Spring Bean的生命周期,那么使用过程中发现SpringBoot 的启动非常快捷,本文将介绍SpringBoot的内部启动原理. 启动过程 如上图所示,我们先分析下Spri ...

  3. SpringBoot基础系列-SpringBoot配置

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html SpringBoot基础系列-SpringBoot配置 概述 属性 ...

  4. Win从环境变量开启MySQL之旅

    Win通过环境变量开启MySQL之旅 这篇文章主要介绍了Windows7下如何在命令行使用MySQL的相关资料,需要的朋友可以参考下 我在Win7下安装的MySQL版本是mysql-5.0.22-wi ...

  5. 开启RxSwift之旅——开篇

    开启RxSwift之旅——开篇 RxSwift 是 ReactiveX 在 Swift 下的实现.ReactiveX 是一个通过使用可观察序列来组合异步和基于事件的程序的库. 很多地方通常把 Reac ...

  6. Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

    原文:Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅 在前几期中总结分享了Android的前世今生.Android 系统架构和应用组件那些事.带你一起来聊一聊Android开发 ...

  7. SpringBoot:4.SpringBoot整合Mybatis实现数据库访问

    在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...

  8. springboot(一).初识springboot以及基本项目搭建

    初识springboot 以及基本项目搭建 由于新的项目需要搭建后台框架,之前的springmvc架构也使用多次,在我印象中springboot的微服务架构更轻量级更容易搭建,所以想去试试spring ...

  9. SpringBoot(19)---SpringBoot整合Apollo

    SpringBoot(19)---SpringBoot整合Apollo 有关Apollo之前已经写了两篇文章: 1.[Apollo](1)--- Apollo入门介绍篇 2.[Apollo](2)-- ...

  10. SpringBoot | 1.1 SpringBoot简介

    前言 本博客仅为记录与总结SpringBoot的学习笔记,资料来源: 书籍<深入浅出SpringBoot>第三版 B站尚硅谷<雷丰阳2021版SpringBoot2零基础入门> ...

随机推荐

  1. Mysql数据处理/行转列/列转行/分割/拼接/数据复制汇总

    mysql数据处理记录(使用的 Workbench) 生成随机数 逗号或分号拼接的字符串分割成多行 多行数据转化成用逗号拼接的字符串 将A表的数据添加到B表 一.生成随机数 生成18位:(19位就加颗 ...

  2. 上传本地Jar包到阿里云的云效私有仓库

    一.前言 前2天玩了一下上传本地jar到maven中央仓库,随后我们老大又给我说了一个叫云效的私有仓库也可以玩,小编试了一下,果然很舒服,配置很简单,效率很高,几分钟就能搞定,只需要自己有个阿里云的账 ...

  3. [Flask Tips]Flask-APScheduler用法总结

    在应用中需要使用调度框架来做一些统计的功能,可惜在Windows上可用的不多,最后选择了APScheduler这个调度器. 用法不多介绍,只总结一下在使用中遇到的坑. app_context 问题 凡 ...

  4. [Advanced Python] 13 - "Decorator": syntactic sugar

    单独一章复习:Python 函数装饰器,廖雪峰讲装饰器 基本概念 函数作为变量 从函数中返回函数 子函数写在外面貌似也可以,可这样就少了“封装性”. def greet(): return " ...

  5. .Net WCF服务部署IIS详细解析

    官方解析:Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通 ...

  6. 基于docker构建测试环境

    目录 0x01介绍 0x02 镜像基本操作 0x03 容器基本操作 0x04 容器的修改与保存 0x05 使用Dockerfile定制镜像 0x01介绍 Docker 是一个开源的应用容器引擎,基于 ...

  7. elastic操作-索引重命名,索引副本数修改

    目前我们使用的elastic版本为2.3.5 当前版本没有直接的curl操作可以更改索引的名称,索引的副本数. 有直接更改索引副本数的api. curl -XPUT "192.168.1.1 ...

  8. C++中类型强制转换

    C++中强制类型转换有四种: 1.static_cast 格式:static_cast<Type>(Value); --用于基本类型间的转换,但不能用于基本类型指针间的转换: int i ...

  9. 夯实Java基础系列9:深入理解Class类和Object类

    目录 Java中Class类及用法 Class类原理 如何获得一个Class类对象 使用Class类的对象来生成目标类的实例 Object类 类构造器public Object(); register ...

  10. 导出wordpress数据库Fatal error: Cannot 'break' 2 levels

    今天我打算备份一下我在Linux下用宝塔面板搭建的phpmyadmin导出wordpress数据库.选择数据库后给我一个Fatal error: Cannot 'break' 2 levels in ...