springboot2.x基础教程:快速入门(代码片段)

Java程序鱼 Java程序鱼     2023-01-07     427

关键词:

如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和订阅专栏

微信号:hzy1014211086,如果你正在学习Spring Boot,可以加入我们的Spring技术交流群,共同成长


序号内容
1面试题专栏
2Redis专栏
3SpringBoot专栏
3SpringBoot专栏更新计划


一、简介

如果我们需要搭建一个 Spring Web 项目的时候需要怎么做呢?
1)配置 web.xml,加载 Spring 和 Spring mvc
2)配置数据库连接、配置 Spring 事务
3)配置加载配置文件的读取,开启注解
4)配置日志文件

配置完成之后部署 Tomcat 调试

配置非常繁琐,如何解决呢?Spring Boot 让我们的 Spring 应用变的更轻量化。我们不必像以前那样繁琐的构建项目、打包应用、部署到 Tomcat 等应用服务器中来运行我们的业务服务。通过Spring Boot 实现的服务,只需要依靠一个 Java 类,把它打包成 jar,并通过 java -jar 命令就可以运行起来。这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。

Spring Boot 主要有如下优点:

  • 简化 Spring 初始搭建以及开发过程,在短时间内快速构建项目
  • SpringBoot 集成了大量的常用第三方库,例如Redis、Mongodb、JPA等,编码非常简单
  • SpringBoot 提供了丰富的 starter ,集成主流的开源产品,只需要少量配置或零配置即可
  • SpringBoot 内嵌了容器,通过简单命令就可以启动

二、初始化Spring Boot项目

构建一个Sping Boot的Maven项目,强烈推荐Spring Initializr,它从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。

Spring Initializr 有两种用法:

  • 使用 Spring Initializr (http://start.spring.io)页面创建
  • 使用IntelliJ IDEA创建

1、使用Spring Initializr 页面创建

第一步:进入 http://start.spring.io 页面

本文将实现一个Http接口,所以选择了一个Web组件。

第二步:点击 GENERATE 按钮,下载项目压缩包

第三步:先解压缩,然后导入到工程里去

  • 菜单中选择File –> New –> Project from Existing Sources…
  • 选择解压后的项目文件夹,点击OK
  • 点击 Import project from external model 并选择Maven,然后一直Next

2、使用IntelliJ IDEA创建

第一步:菜单中选择File –> New –> Project

第二步:选择Spring Initializr


三、项目结构


如上图所示,Spring Boot 的基础结构共三个文件:

  • src/main/java 程序开发以及主程序入口
  • src/main/resources 配置文件
  • src/test/java 测试程序

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

四、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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.fish</groupId>
    <artifactId>chapter1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>chapter1</name>
    <description>SpringBoot第一章节</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

如上所示,主要有四个部分:

  • 项目元数据:groupId、artifactId、version、name、description等
  • parent:Spring Boot 父级依赖, spring-boot-starter-parent 是一个特殊 Starter,它提供了有用的 Maven 默认配置。此外它还提供了依赖管理功能,您可以忽略这些依赖的版本(version)标签。
  • dependencies:项目具体依赖,这里包含了 spring-boot-starter-web 用于实现HTTP接口, spring-boot-starter-test 用于编写单元测试的依赖包。
  • build:构建配置部分,默认使用了 spring-boot-maven-plugin (Spring Boot Maven插件),配合 spring-boot-starter-parent 就可以把Spring Boot 应用打包成 JAR 来直接运行。

五、编写一个HTTP接口

package com.fish.chapter1.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController 
  @RequestMapping("/test")
  public String test() 
    return "test";
  


六、配置端口号

application.properties文件加入下面这行配置

server.port=8080

七、应用入口类

package com.fish.chapter1;

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

@SpringBootApplication
public class Chapter1Application 

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


@SpringBootApplication是Sprnig Boot项目的核心注解,主要目的是开启自动配置。后续讲解原理的时候再深入介绍。

启动主程序,然后浏览器地址栏输入:http://localhost:8080/test,可以看到页面返回:test

八、单元测试

package com.fish.chapter1;

import com.fish.chapter1.controller.TestController;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest(classes=Chapter1Application.class)
@WebAppConfiguration
class Chapter1ApplicationTests 

	private MockMvc mvc;

	@BeforeEach
	public void setUp() throws Exception 
		mvc = MockMvcBuilders.standaloneSetup(new TestController()).build();
	

	@Test
	public void test() throws Exception 
		mvc.perform(MockMvcRequestBuilders.get("/test").accept(MediaType.APPLICATION_JSON))
			.andExpect(status().isOk())
			.andExpect(content().string(equalTo("test1")));
	


注意引入下面内容,让status、content、equalTo函数可用,否则会报错,提示status()、content()、equalTo()方法不存在。

SpringBoot2.X 默认集成的是 JUnit5,JUnit5 中支持lambda表达式,语法简单且代码不冗余。用法和 JUnit4有些差别,如果不适应的小伙伴,可以切换到JUnit4。


测试通过,如果我们把equalTo改成test1会是怎样?

@Test
public void test() throws Exception 
		mvc.perform(MockMvcRequestBuilders.get("/test").accept(MediaType.APPLICATION_JSON))
			.andExpect(status().isOk())
			.andExpect(content().string(equalTo("test1")));


会报错,预期值test1,实际值test。

单元测试常用注解

  • @BeforeEach:在每个单元测试方法执行前都执行一遍
  • @BeforeAll:在每个单元测试方法执行前执行一遍(只执行一次)
  • @DisplayName(“Demo测试”):用于指定单元测试的名称
  • @Disabled:当前单元测试置为无效,即单元测试时跳过该测试
  • @RepeatedTest(n):重复性测试,即执行n次
  • @ParameterizedTest:参数化测试,
  • @ValueSource(ints = 1, 2, 3):参数化测试提供数据

九、源码

本文的相关例子可以查看下面仓库中的 chapter1 目录:

Gitee:https://gitee.com/hezhiyuan007/spring-boot-study
Github:https://github.com/java-fish-0907/spring-boot-study

2018最新springboot2.0教程(零基础入门)

一、零基础快速入门SpringBoot2.01、SpringBoot2.x课程全套介绍和高手系列知识点简介:介绍SpringBoot2.x课程大纲章节java基础,jdk环境,maven基础2、SpringBoot2.x依赖环境和版本新特性说明简介:讲解新版本依赖环境和springboot2新特性概述3... 查看详情

零基础快速入门springboot2.0教程

一、SpringBoot2.x使用Dev-tool热部署简介:介绍什么是热部署,使用springboot结合dev-tool工具,快速加载启动应用官方地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools核心依赖包:<dependency 查看详情

《springboot免费教程》连载目录

...Star关注支持一下,随时获得更新信息!快速入门SpringBoot2.x基础教程:版本关系SpringBoot2.x基础教程:快速入门SpringBoot2.x基础教程:工程结构推荐配置详解SpringBoot2.x基础教程:配置文件详解SpringBoot2.x基础教... 查看详情

《springboot免费教程》连载目录

...Star关注支持一下,随时获得更新信息!快速入门SpringBoot2.x基础教程:版本关系SpringBoot2.x基础教程:快速入门SpringBoot2.x基础教程:工程结构推荐配置详解SpringBoot2.x基础教程:配置文件详解SpringBoot2.x基础教... 查看详情

零基础快速入门springboot2.0

零基础快速入门SpringBoot2.0(一) 一、SpringBoot2.x依赖环境和版本新特性说明简介:讲解新版本依赖环境和springboot2新特性概述              1、依赖版本jdk8以上,Springboot2.x用JDK8 查看详情

零基础快速入门springboot2.0

一、SpringBoot2.x依赖环境和版本新特性说明简介:讲解新版本依赖环境和springboot2新特性概述1、依赖版本jdk8以上,Springboot2.x用JDK8,因为底层是Springframework5,2、安装maven最新版本,maven3.2以上版本,下载地址:https://maven.apache.org/downloa... 查看详情

springboot2.x入门:快速创建一个springboot应用(代码片段)

前提这篇文章是《SpringBoot2.x入门》专辑的第2篇文章,使用的SpringBoot版本为2.3.1.RELEASE,JDK版本为1.8。常规的套路会建议使用Spring官方提供的工具SpringInitializr通过指定配置创建一个SpringBoot项目,但是考虑到SpringInitializr必须联网... 查看详情

springboot2.x:入门篇(代码片段)

什么是SpringBootSpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架遵循”约定优于配置“的思想,清除了原先使用Spring框架的那些样板化的配置,继承了原有Spring框架的优... 查看详情

springboot2.x基础教程:使用@scheduled实现定时任务(代码片段)

我们在编写SpringBoot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在SpringBoot中编写定时任务是非常简单的事,... 查看详情

springboot2.x基础教程:springboot整合mybatis附源码(代码片段)

微信号:hzy1014211086,如果你正在学习SpringBoot,可以加入我们的Spring技术交流群,共同成长文章目录一、准备数据表二、添加依赖三、配置数据源四、编写领域对象五、注解配置方式新增修改查询删除六、XML配置... 查看详情

springboot2.x基础教程:使用elasticjob实现定时任务(代码片段)

上一篇,我们介绍了如何使用SpringBoot自带的@Scheduled注解实现定时任务。文末也提及了这种方式的局限性。当在集群环境下的时候,如果任务的执行或操作依赖一些共享资源的话,就会存在竞争关系。如果不引入分... 查看详情

springboot2.x入门——helloworld

Springboot2.x入门——helloWorld一、简介1.1Springboot简介SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化... 查看详情

springboot2.x最佳实践《一》之springboot2.x初体验

SpringBoot2.X最佳实践前言本系列文章,从零基础接触 SpringBoot2.x新版本,基础入门使用,热部署,到整合各个主流框架Redis4.x,消息队列AciveMQ,RocketMQ等,搜索框架ElasticSearch5.6版本,到web-flux反应式编程,到Actuator监控应用信息... 查看详情

springboot2.x基础教程:使用@scheduled实现定时任务(代码片段)

我们在编写SpringBoot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在SpringBoot中编写定时任务是非常简单的事,... 查看详情

springboot2.x基础教程:使用集中式缓存redis

之前我们介绍了两种进程内缓存的用法,包括SpringBoot默认使用的ConcurrentMap缓存以及缓存框架EhCache。虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各应用服务器之间的缓存都是独... 查看详情

springboot2.x基础教程:使用springdatajpa访问mysql

在数据访问这章的第一篇文章《Spring中使用JdbcTemplate访问数据库》中,我们已经介绍了如何使用SpringBoot中最基本的jdbc模块来实现关系型数据库的数据读写操作。那么结合Web开发一章的内容,我们就可以利用JDBC模块与Web模块的功... 查看详情

springboot2.x基础教程:使用jdbctemplate访问mysql数据库

在第2章节中,我们介绍了如何通过SpringBoot来实现HTTP接口,以及围绕HTTP接口相关的单元测试、文档生成等实用技能。但是,这些内容还不足以帮助我们构建一个动态应用的服务端程序。不论我们是要做App、小程序、还是传统的We... 查看详情

springboot2.x整合prometheus+grafana附源码(代码片段)

图文并茂,新手入门教程,建议收藏SpringBoot2.x整合Prometheus+Grafana【附源码】附源码+视频[toc]工程简介总体框架图简介PrometheusPrometheus,是一个开源的系统监控和告警的工具包,其采用Pull方式采集时间序列的度量数据(也支持push... 查看详情