SpringBoot开发实用篇1

news2024/12/26 0:41:09

一、热部署

1.手工启动热部署

经过测试当前是没有启动热部署的:
在这里插入图片描述
在这里插入图片描述
再将sout的信息多复制几份,刷新功能,发现控制台还是只打印一行信息。说明当前热部署是没有生效的。
手动开启热部署:
在pom.xml文件中加入开发者工具配置热部署:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

运行程序后,修改代码发现热部署没有生效。
需要配合项目构建工具共同使用:
在这里插入图片描述
修改代码后,点击Build Project,热部署就成功了(激活热部署)。
关于热部署:
重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器;
重载(ReLoad):jar包,加载位置base类加载器。
热部署是不需要将jar包再加载一遍的,热部署仅仅是restart过程,而不包括relload过程。(热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源)
程序第一次启动的时候既有restart,也有reload过程。

2.自动启动热部署

设置自动构建项目:
在这里插入图片描述
在这里插入图片描述
IDEA失去焦点5秒后,自动热部署。

3.热部署配置范围

页面不参与热部署,页面更改后,一刷新,就显示出来了。
配置文件参与热部署。
自定义重启排除项:下面设置的文件不参与热部署

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC&useSSL=false
      username: root
      password: "****"
  devtools:
    restart:
      #设置不参与热部署的文件或文件夹
      exclude: static/**,public/**,config/application.yml

4.关闭热部署

设置高优先级属性(Java系统属性)禁用热部署:为了覆盖所有配置文件。
在这个配置文件中设置是不行的,可能有更高优先级的配置文件开启了热部署。
在这里插入图片描述
设置在引导类中:
在这里插入图片描述

二、配置高级(围绕配置中数据的读取)

1.@ConfigurationProperties可以为第三方的bean绑定属性

@ConfigurationProperties属性可以将配置文件的内容加载到bean容器中。

加载自定义的属性到bean中

配置文件中:
在这里插入图片描述
这个类加载配置文件中的内容,并将这个类交给bean来管理
在这里插入图片描述
测试一下,bean中有配置文件的内容:
在这里插入图片描述

加载第三方依赖的属性到bean中

使用Durid数据源连接池进行测试:
在这里插入图片描述
使用@ConfigurationProperties属性为第三方bean绑定属性:
把datasource改成驼峰命名法,就会报错,为什么?(宽松绑定/松散绑定)
在这里插入图片描述
在这里插入图片描述

@ConfigurationProperties不仅可以为自己开发的组件做bean的属性绑定,还可以为第三方的bean绑定属性,格式相同。
@EnableConfigurationProperties和@ConfigurationProperties的区别:
Enable可以看作是一个开关,开启配置属性的功能,向对应的类里做属性注入,要设定目标是谁,@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器,使用所以不用写@Component

在这里插入图片描述
在这里插入图片描述

2.宽松绑定/松散绑定

@ConfigurationProperties绑定属性支持属性名宽容绑定
在配置文件中任意写,注解都能认出来

ipAddress: 192.168.1.1
ip_address: 192.168.1.1
ip-address: 192.168.1.1
IP_ADDRESS: 192.168.1.4

@Value注解不能用松散绑定,在配置文件中写什么,注解里就应该写什么:
在这里插入图片描述
@ConfigurationProperties注解的前缀有格式,写成全小写或烤肉串命名。

@ConfigurationProperties(prefix = "datasource")

3.常用计量单位绑定

SpringBoot支持JDK8提供的时间与空间计量单位
在这里插入图片描述
在这里插入图片描述

4.数据校验 开启bean数据校验

1.添加JSR303规范坐标与Hibernate校验框架对应坐标:
在这里插入图片描述
2.开启Bean校验功能
3.使用具体校验规则规范数据校验格式
在这里插入图片描述

三、与测试有关

基于基础篇测试之上的补充:web环境、表现层的测试、数据层的测试。

1.加载测试属性专用属性

应用场景:测试环境中使用临时的属性。
1.使用properties属性可以为当前测试用例添加临时的属性配置
配置文件中有属性:
在这里插入图片描述
测试文件中通过properties设置属性:临时配置有效。
在这里插入图片描述
在这里插入图片描述
2.使用args属性为当前测试用例添加临时的命令行参数
在这里插入图片描述
3.同时使用 properties级别高

在这里插入图片描述

2.加载测试专用配置

如何在测试环境中临时加第三方bean?
例如Mybatis-plus用的分页的拦截器,配置了一个第三方bean加入到容器中,本次测试环境中加入一个临时的bean,辅助测试。这本bean只服务于本次的测试过程,不服务于其他的,不定义到源码级别。

使用@Import注解加载当前测试类专用的配置
在这里插入图片描述
在这里插入图片描述

3.Web环境模拟测试

如何在测试用例测表现层?需要启动web环境的模拟
可以选用的参数有:DEFINED_PORT,RANDOM_PORT,NONE
在这里插入图片描述
发送虚拟请求:虚拟请求测试
在这里插入图片描述
匹配响应体:进行状态的匹配
先去设定一个预计值,再添加预计值到本次调用结果中进行匹配,成功过,失败给出信息。
在这里插入图片描述
匹配响应体:执行内容的匹配
匹配字符串:
在这里插入图片描述
匹配json
在这里插入图片描述
匹配响应头:匹配是不是json
在这里插入图片描述
在实际测试中,可以并列使用,预定义一个,匹配一个。

/**
     * 在实际开发中应该怎么写
     * @param mvc
     * @throws Exception
     */
    @Test
    void testGetById(@Autowired MockMvc mvc) throws Exception {
        MockHttpServletRequestBuilder builder= MockMvcRequestBuilders.get("/books");
        ResultActions action = mvc.perform(builder);

        StatusResultMatchers status = MockMvcResultMatchers.status();
        ResultMatcher ok = status.isOk();
        action.andExpect(ok);

        ContentResultMatchers content = MockMvcResultMatchers.content();
        ResultMatcher result = content.json("{\"id\":1,\"name\":\"springboot\",\"type\":\"springboot\",\"description\":\"springboot\"}");
        action.andExpect(result);

        HeaderResultMatchers header = MockMvcResultMatchers.header();
        ResultMatcher contentType = header.string("Content-Type", "application/json");
        action.andExpect(contentType);

    }

4.数据层测试回滚

为测试用例添加事务,SpringBoot会对测试用例对应的事务提交操作进行回滚;
如果想在测试用例中提交事务,可以通过@Rellback注解设置。
true进行回滚,false不进行回滚。
在这里插入图片描述

5.测试用例数据设定

测试用例中的数据不能写死,应该用随机值。
测试用例数据通常采用随机值进行测试,使用SpringBoot提供的随机数为其赋值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

springBoot-Mybatis-Plus 多数据源切换实现

前言&#xff1a;本文主要通过AbstractRoutingDataSource&#xff0c;实现根据 http 访问携带的标识动态切换数据源&#xff1b; 1 AbstractRoutingDataSource 介绍&#xff1a; AbstractRoutingDataSource 是 Spring 框架中的一个抽象类&#xff0c;它可以用来实现动态数据源…

2023年数据分析的就业薪资水平情况

2023年数据分析的就业薪资水平情况 数据已经成为我们工作生活不可缺少的一部分&#xff0c;也成为企业提高竞争力的有效支撑。随着越来越的企业进行数字化转型&#xff0c;对于数据的需求也将越来越大&#xff0c;那么对于正在学习数据分析或者想学习数据分析的小伙伴来说&…

浅析基于AI视频智能识别技术的医疗废弃物智能监管及风险预警方案

一、方案背景 医疗废弃物含有大量的细菌、病毒、化学污染物等&#xff0c;若是回收处置不当、工作人员防护不到位等&#xff0c;会严重影响公众及个人的健康及周围环境。 对医疗废弃物的规范管理&#xff0c;也成为医疗废弃物处置行业的重要一环。传统视频监控方案主要依靠监…

漏电保护插座插排真的有用吗?同为科技(TOWE)漏保系列PDU产品

所谓漏电保护&#xff0c;是指当电气设备绝缘发生故障&#xff0c;电线和地之间、线路和线路之间、工作回路与不能带电的金属壳体形成电流通路&#xff0c;叫做漏电&#xff1b;为预防漏电对人体造成伤害&#xff0c;就产生了各种漏电保护装置&#xff0c;当电路中的漏电流超过…

数字孪生:双碳目标推动下的汽车动力电池发展

据中汽协统计&#xff0c;2022年我国新能源汽车持续爆发式增长&#xff0c;销量超680万辆&#xff0c;已连续8年位居世界第一&#xff0c;保持“快车道”发展态势&#xff0c;引起西方发达国家的高度重视。相当一部分国家以产品全生命周期碳排放为基础&#xff0c;试图建立新的…

一文带你了解移动入库指南(详细版)

​ 移动入库认证周期&#xff1a; 常规为 4-6 周 中国移动是一家基于 GSM、TD-LTE、FDD-LTE 制式网络的移动通信运营商。日前已建成 5G 基站近 39 万个&#xff0c;并且全面推动 SA 网络&#xff0c;同时和中国广电共同发展 5G 网络。作为全球 5G 网络覆盖广、用户规模大的通信…

Q1业绩整体回暖,影视行业找到增长新路径

凛冬已过&#xff0c;影视行业恢复了生机。 数据显示&#xff0c;今年一季度&#xff0c;影视院线板块全部上市公司分别实现营收、归母净利111.86亿元、10.15亿元&#xff0c;同比增幅为1.44%和53.76%。在经济复苏的背景下&#xff0c;影视行业实现了扭亏为盈和跨越式增长。 …

Fiddler抓包丨最常用功能实战演练

目录 一. 停止抓包 二. 清空会话窗 三. 过滤请求 只显示目标请求 只抓取目标端的请求 四. 解码 五. 设置断点 伪造客户端请求 伪造服务器响应 注意事项 六. 总结 结语 通过上一篇文章Fiddler移动端抓包&#xff0c;我们知道了Fiddler抓包原理以及怎样进行移动端抓包…

虎牙直播在微服务改造的实践总结

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面…

一文快速了解浏览器Sui Explorer

Sui作为一条基于第一原理重新设计和构建而成的L1公链&#xff0c;所有区块和交易信息皆公开透明&#xff0c;每个人都能自行查看。通过Sui链上浏览器&#xff0c;用户可以迅速了解链上的交易情况&#xff0c;比如当前的TPS和Gas价格&#xff0c;也可以使用Digest来查看特定交易…

工厂安灯呼叫系统解决方案

在选择安灯呼叫系统之前&#xff0c;需要先了解自己的需求。不同的工厂可能有不同的需求&#xff0c;例如生产线的规模、生产过程中可能会出现的问题等。因此&#xff0c;选择安灯呼叫系统之前&#xff0c;需要先考虑自己的需求&#xff0c;以便选择到最适合自己的系统。要从多…

三十九、分布式事务、seata、

1、事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作&#xff0c;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行、要么都不执行。 1.1 ACID事务的特点 原子性: 一致性&#xff1a;隔离性持久性 1.2 事务并发带来的问题 脏读 幻读 不可重复读 …

Mongodb Shell 常用操作命令

目录 一、启动与关闭mongodb服务 二、进入shell操作 三、常用shell命令 一、启动与关闭mongodb服务 启动:命令: ./mongod -config ../data/mongodb.conf 关闭命令: ./mongod -config ../data/mongodb.conf -shutdown 二、进入shell操作 命令:./mongo 三、常用shell命令 sh…

mysql查看实时执行的sql

MySQL默认不能实时查看执行的SQL语句&#xff0c;因为这会消耗一定的资源。 要开启这个功能&#xff0c;稍微配置一下&#xff0c;打开这个LOG记录就可以了。 查看开启情况 SHOW VARIABLES LIKE "general_log%";general_log值为OFF说明没有开启&#xff1a; 打开…

C++——内存管理+模块

作者&#xff1a;几冬雪来 时间&#xff1a;2023年5月19日 内容&#xff1a;C——内存管理模块 目录 前言&#xff1a; 1.new和delete操作自定义类型&#xff1a; operator new/delete&#xff1a; 定位new表达式&#xff08;placement-new&#xff09;&#xff1a; …

横向对比 11 种算法,多伦多大学推出机器学习模型,加速长效注射剂新药研发

内容一览&#xff1a;长效注射剂是解决慢性病的有效药物之一&#xff0c;不过&#xff0c;该药物制剂的研发耗时、费力&#xff0c;颇具挑战。对此&#xff0c;多伦多大学研究人员开发了一个基于机器学习的模型&#xff0c;该模型能预测长效注射剂药物释放速率&#xff0c;从而…

软件物料清单:打开软件资产黑匣子的关键钥匙

大家有没有遇到过&#xff0c;手机被免费召回维修的情况&#xff1f; 有些人可能遇到这样的问题&#xff0c;手机购买一段时间后&#xff0c;突然收到手机品牌官方发布的通知&#xff1a;听筒模块上的某个组件可能会发生故障&#xff0c;会出现拨打或接听电话时听筒发不出声音的…

接口自动化【五】(HandleRequests类的封装,及postman上下接口依赖的初步认识)

文章目录 前言一、封装发送请求的操作二、迷惑的知识点三、postman的全局变量机制总结 前言 所有的封装就是一种思想&#xff0c;这种思想能不能想到&#xff0c;其实跟写代码建立思维有很大的关系。 下面也是我学到的一种思想&#xff0c;其中对每个函数有解读。以及易错点的…

算法小课堂(九)分支限界法

一、概述 1.1概念 分支限界法是一种求解最优化问题的算法&#xff0c;常以广度优先或以最小耗费&#xff08;最大效益&#xff09;优先的方式搜索问题的解空间树。其基本思想是把问题的可行解展开&#xff0c;再由各个分支寻找最佳解。 在分支限界法中&#xff0c;分支是使用广…

Go 语言核心编程-环境入门篇

第 1 章 Golang 开山篇 1.1 Golang 的学习方向 Go 语言&#xff0c;我们可以简单的写成 Golang 1.2 Golang 的应用领域 1.2.1区块链的应用开发 1.2.2后台的服务应用 1.2.3云计算/云服务后台应用 1.3 学习方法的介绍 1.4 讲课的方式的说明 努力做到通俗易懂注重 Go 语言体系&…