Spring Boot单元测试与热部署简析

1        Spring Boot的简介

Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的开发过程,提供了自动配置和默认配置,使得开发者只需专注于业务逻辑的实现,而不用去关注繁琐的配置问题。

Spring Boot具有以下特点:

  1. 简化配置:Spring Boot通过自动配置机制来减少配置的工作量。它会根据项目的依赖自动配置相关的组件,开发者只需要添加依赖和一些简单的配置即可。

  2. 快速开发:Spring Boot提供了一套完整的开发工具,包括代码生成器、热部署等,可以大大加快开发速度。

  3. 微服务支持:Spring Boot天生支持微服务架构,可以方便地构建和部署独立的微服务应用程序。

  4. 内嵌服务器:Spring Boot内嵌了常见的Web服务器(如Tomcat、Jetty等),可以以独立应用程序的形式运行,不需要额外安装Web服务器。

  5. 监控和管理:Spring Boot提供了丰富的监控和管理功能,可以方便地监控应用程序的运行状态和健康状况。

2       Spring Boot的单元测试以及热部署的相关知识

Spring Boot 提供了很好的支持来编写单元测试和实现热部署。下面我将简要介绍一下这两个方面的相关知识。

2.1        单元测试: Spring Boot 使用了JUnit作为默认的单元测试框架,可以通过注解@RunWith(SpringRunner.class)来指定运行器,以便在测试过程中初始化Spring的应用上下文。 你可以使用@SpringBootTest注解标注测试类,以便在测试期间初始化Spring Boot应用的完整上下文。 你还可以使用@MockBean@Mockito等注解来模拟依赖的外部组件或服务。 另外,Spring Boot还提供了一些其他有用的注解,如@DataJpaTest@WebMvcTest等,用于测试特定领域或Web层的代码。

以下是在Spring Boot中进行单元测试和相关部署的一些常用方法和技巧:

  • 使用JUnit:JUnit是Java开发中最常用的单元测试框架之一。Spring Boot默认使用JUnit进行单元测试,可以使用@RunWith(SpringRunner.class)注解来启用Spring Boot的测试支持。可以使用@Test注解来标记测试方法。

  • 使用Mockito:Mockito是一个用于创建和管理模拟对象(mock objects)的Java库。在单元测试中,我们可以使用Mockito来模拟一些外部依赖,以便更好地控制测试环境。例如,我们可以使用Mockito来模拟数据库访问,而不是实际访问数据库。

  • 使用Spring Boot Test:Spring Boot Test提供了一系列用于测试Spring Boot应用程序的注解和类。例如,@SpringBootTest注解可以用于加载整个应用程序上下文,并进行集成测试。@WebMvcTest注解可以用于测试Web层的控制器。

  • 使用测试配置文件:Spring Boot允许我们在单元测试中使用不同的配置文件,以便更好地控制测试环境。可以使用@TestProperites注解来指定测试配置文件的路径。在测试配置文件中,我们可以覆盖一些配置项,例如数据库连接、缓存配置等。

  • 使用断言和断言库:在单元测试中,我们通常需要验证期望的结果与实际结果是否一致。可以使用JUnit的断言方法,如assertEqualsassertTrue来进行验证。此外,还可以使用一些流行的断言库,如AssertJ和Hamcrest来提供更多的断言方法。

  • 运行单元测试:在Spring Boot中,我们可以使用Maven或Gradle等构建工具来运行单元测试。可以使用mvn testgradle test命令来执行单元测试。

2.2        热部署: 在开发阶段,热部署可以使你的代码更快地重新部署和运行。Spring Boot支持两种类型的热部署:

  • 通过使用spring-boot-devtools模块,你可以在应用启动时自动配置热部署。只需将该模块添加到依赖中即可,无需进行其他配置。
  • 通过使用spring-boot-maven-plugin插件,你可以在代码改变时重新启动应用。只需在pom.xml文件中添加该插件的配置,并运行mvn spring-boot:run命令即可。
  1. 另外,热部署还有一些其他的选项和配置方式,如使用Spring Loaded或JRebel等第三方工具。

以下是一些常用的热部署技巧和方法:

  • 使用开发工具的自动重载功能:许多集成开发环境(IDE)和开发工具都提供了自动重载功能,可以自动监视代码的变化并重新加载应用程序。例如,Eclipse中的Spring Loaded插件、IntelliJ IDEA中的Spring Boot DevTools等。
  • 使用Spring Boot的开发者工具(DevTools):Spring Boot DevTools提供了一套开发者工具,可以实现热部署和快速重新启动应用程序。它会监视应用程序的类文件和资源文件的变化,并在检测到变化时自动重新加载应用程序。
  • 使用JRebel:JRebel是一个用于Java开发的工具,可以实现即时的代码热部署。它可以监视文件的变化,并将修改的类文件和资源文件重新加载到运行中的应用程序中,从而避免了重新启动应用程序。
  • 使用Docker容器:将应用程序部署在Docker容器中,可以实现快速部署和更新。通过构建一个容器镜像并运行容器,可以在容器内部使用热部署技术来更新代码。修改后的容器镜像可以轻松地重新部署到生产环境中。

使用热部署插件:一些特定的框架和工具提供了热部署插件,可以用于在开发过程中实现热部署。例如,Spring Boot的Spring Loaded插件、JRebel的插件等。这些插件通常会提供自动监视和重新加载功能,从而实现快速开发和调试。

3        效果图

4        项目搭建步骤

在prom.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.sbl</groupId><artifactId>MavenSBlnit</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.1.3.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies></project>

在所创项目下的src.main.java的包下面建立controller包,并建立类HelloWporld

package com.sbl.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloWorld {@GetMapping("/hello")public String hello(){return "Hello World,i am 小孩 ";}
}

在原本创建的类下(及主项目)

package com.sbl;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class
MavenApplication {public static void  main(String[] args){SpringApplication.run(MavenApplication.class,args);}
}

在test在Java文件下的包下建立test类

package com.sbl.chapter01sbinit;import com.sbl.controller.HelloWorld;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter01SbinitApplicationTests {@Autowiredprivate HelloWorld helloWorld;@Testpublic void contextLoads(){String hello= helloWorld.hello();System.out.println(hello);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch 底层读写原理

ElasticSearch 底层读写原理 ​ 写请求是写入 primary shard&#xff0c;然后同步给所有的 replica shard&#xff1b;读请求可以从 primary shard 或 replica shard 读取&#xff0c;采用的是随机轮询算法。 1、ES写入数据的过程 1.选择任意一个DataNode发送请求&#xff0c…

Java17 --- springCloud之LoadBalancer

目录 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom 1.3、80服务controller层&#xff1a; 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom <!--loadbalancer-->&…

WPF 窗口添加投影效果Effect

BlurRadius&#xff1a;阴影半径 Color&#xff1a;颜色 Direction&#xff1a;投影方向 ShadowDepth&#xff1a;投影的深度 <Window.Effect><DropShadowEffect BlurRadius"10" Color"#FF858484" Direction"300" ShadowDepth&quo…

LLM长上下文外推方法

现在的LLM都集中在卷上下文长度了&#xff0c;最新的Claude3已经支持200K的上下文&#xff0c;见&#xff1a;cost-context。下面是一些提升LLM长度外推能力的方法总结&#xff1a; 数据工程 符尧大佬的最新工作&#xff1a;Data Engineering for Scaling Language Models to …

【Nestjs实操】环境变量和全局配置

一、环境变量 1、使用dotenv 安装pnpm add dotenv。 根目录下创建.env文件&#xff0c;内容如下&#xff1a; NODE_ENVdevelopment使用 import {config} from "dotenv"; const path require(path); config({path:path.join(__dirname,../.env)}); console.log(…

探索代理服务器:保护您的网络安全与隐私

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 隐藏真实IP地址&#xff1a; 访问控制&#xff1a; 加速访问速度&#xff1a; 过滤内容&#xff1a; 突破访问限制&#xff1…

Python图像处理:1.插值、频域变换与对比度增强

一、几何变换 7.图像的插值 (1)原理介绍 下面对比三种插值方法&#xff0c;分别是最近邻插值法、双线性插值法、卷积插值法&#xff0c;三种方法的前提和特点、优缺点、适用场景如下&#xff1a; 最近邻插值&#xff08;Nearest Neighbor Interpolation&#xff09;&#xf…

Linux网络套接字补充

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、地址转换函数 二、TCP协议通讯流程 三、…

线上应用部署了两台load为1四核服务器

线上应用部署了两台服务器。 项目发布后&#xff0c;我对线上服务器的性能进行了跟踪&#xff0c;发现一台负载为3&#xff0c;另一台负载为1&#xff0c;其中一台四核服务器已经快到瓶颈了&#xff0c;所以我们紧急排查原因。 1、使用TOP命令查看占用CPU较大的负载和进程&…

JavaWeb基础入门——(二)MySQL数据库基础(2-SQL 结构化查询语言)

四、MySQL逻辑结构 4.1 逻辑结构 4.1 记录 五、SQL 结构化查询语言 5.1 SQL概述 SQL&#xff08;Structural Query Language&#xff09;结构化查询语言&#xff0c;用于存取、查询、更新数据以及管理关系型数据库系统 5.1.1 SQL发展 SQL是在1981年由IBM公司推出&#xff0c;…

深入理解 Webpack 热更新原理:提升开发效率的关键

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

了解华为(PVID VLAN)与思科的(Native VLAN)本征VLAN的区别并学习思科网络中二层交换机的三层结构局域网VLAN配置

一、什么是二层交换机&#xff1f; 二层交换机&#xff08;Layer 2 Switch&#xff09;是一种网络设备&#xff0c;主要工作在OSI模型的数据链路层&#xff08;第二层&#xff09;&#xff0c;用于在局域网内部进行数据包的交换和转发。二层交换机通过学习MAC地址表&#xff0…

计算机服务器中了locked勒索病毒怎么解密,locked勒索病毒解密流程

科技的发展带动了企业生产&#xff0c;越来越多的企业开始利用计算机服务器办公&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但随之而来的网络安全威胁也引起了众多企业的关注。近日&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0c;企业的计算机服务器…

arthas之生产环境排查问题常用功能

背景 生产环境调试使用。对问题进行高效排查。 目录 一、watch idea安装arthas插件 idea插件下载代理配置 A. 选择Http Proxy Settings, 打开配置页面B. 选择 Auto-detect proxy settingC. 上图中选择Ok即可, plugin 列表 刷新得到插件内容 启动arthas客户端watch监听 通过art…

(关键点检测)YOLOv8实现多类人体姿态估计的输出格式分析

&#xff08;关键点检测&#xff09;YOLOv8实现多类人体姿态估计的输出格式分析 任务分析 所使用的数据配置文件 网络结构 导出模型 用 netron 可视化 输出格式分析 参考链接 1. 任务分析 判断人体关键点时一并给出关键点所属的类别&#xff0c;比如男人&#xff0c;女…

【Redis知识点总结】(二)——Redis高性能IO模型剖析

Redis知识点总结&#xff08;二&#xff09;——Redis高性能IO模型及其事件驱动框架剖析 IO多路复用传统的阻塞式IO同步非阻塞IOIO多路复用机制 Redis的IO模型Redis的事件驱动框架 IO多路复用 Redis的高性能的秘密&#xff0c;在于它底层使用了IO多路复用这种高性能的网络IO&a…

vue 自定义组件绑定model+弹出选择支持上下按键选择

参考地址v-modelhttps://v2.cn.vuejs.org/v2/guide/components-custom-events.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E7%9A%84-v-model 原文代码 Vue.component(base-checkbox, {model: {prop: checked,event: change},props: {checked: Boolean},template: `…

2.4_3 死锁的处理策略——避免死锁

文章目录 2.4_3 死锁的处理策略——避免死锁&#xff08;一&#xff09;什么是安全序列&#xff08;二&#xff09;安全序列、不安全状态、死锁的联系&#xff08;三&#xff09;银行家算法 总结 2.4_3 死锁的处理策略——避免死锁 银行家算法是“避免死锁”策略的最著名的一个…

Elasticsearch架构原理

一. Elasticsearch架构原理 1、Elasticsearch的节点类型 在Elasticsearch主要分成两类节点&#xff0c;一类是Master&#xff0c;一类是DataNode。 1.1 Master节点 在Elasticsearch启动时&#xff0c;会选举出来一个Master节点。当某个节点启动后&#xff0c;然后使用Zen D…

时间感知自适应RAG(TA-ARE)

原文地址&#xff1a;Time-Aware Adaptive RAG (TA-ARE) 2024 年 3 月 1 日 介绍 随着大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;出现了新兴能力的概念。前提或假设是LLMs具有隐藏的和未知的能力&#xff0c;等待被发现。企业家们渴望在LLMs中发现一些无人知晓…