springboot的学习(三):开发相关

简介

一些开发测试时用到的技术。

springboot

热部署

修改了代码,服务器不需要重启可以直接看到新的修改的效果。仅仅加载当前开发者自定义开发的资源,不加载jar资源。
在pom.xml配置文件中添加:

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

修改了内容之后,点击build project即可。
在这里插入图片描述

设置自动热部署

可以设置成不用点build project,项目自动的进行构建。
在这里插入图片描述
设置在项目运行中也可以自动构建,在idea上ctrl+alt+shift+/
在这里插入图片描述
在这里插入图片描述

热部署作用范围

可以设置一些目录的修改是不会触发热部署的。在yml配置文件中:

devlops:restart:exclude: 路径
关闭热部署
devlops:restart:enabled: false

第三方bean绑定属性

使用@ConfigurationProperties(prefix = “yml中的属性”)注解为第三方的bean绑定属性。
例子:
给datasource对象设置driverClassName
在配置文件中:

datasource:driverClassName: com.mysql.jdbc.Driver

在java类中:

@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource datasource(){
DruidDataSource ds = new DruidDataSource ();
return ds;
}

为bean绑定属性

在配置文件application.xml中:

servers:ipAddress: 192.168.0.1port:8888timeout: -1

在pojo类中

@Component
@Data
@ConfigurationProperties(prefix="service")
public Class ServletConfig{
private String ipAddress;
private int port;
private long timeout;
}

注意:@ConfigurationProperties是松散绑定的

@EnableConfigurationProperties

可以将使用@ConfigurationProperties注解的类加入到spring容器中,为了方便统一管理,可以更便捷的看到哪些类使用了ConfigurationProperties。这个注解作用在启动类上,使用了这个注解,在实体类上就不能使用@component修饰了。

bean属性校验

在pom.xml文件中导入jsr303规范坐标和hibernate校验框架坐标:

            <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId></dependency><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId></dependency>

在bean中,@Validated开启校验,属性上面可以添加各种注解来校验,如果不符合规范,会提示注解中的message信息。

@Validated
public class User {private String name;@Max(value= 35,message="最大值不超过4")private Integer age;}

yaml配置文件数据转换

在配置文件yaml中,数字是支持2进制,8进制,16进制的

datasource:driverClassName: com.mysql.jdbc.Driverpassword: 0123

在测试类中使用@value读取

    @Value("${datasource.datatest}")private String datatest;@Test
void test01(){System.out.println(datatest);
}

在这里插入图片描述
springboot是把0123当成了八进制的数字了
可以在yaml中添加上双引号当成字符串接受。

datasource:driverClassName: com.mysql.jdbc.Driverdatatest: "0123"

在这里插入图片描述

测试

临时属性

在测试类中,可以给测试类加上只在这个类中生效的属性配置,这个临时配置属性可以覆盖掉yaml中设置的属性。
yaml中有这个配置

datasource:driverClassName: com.mysql.jdbc.Driverdatatest: "0123"

使用@SpringBootTest(properties = {“datasource.datatest=98765”})设置一个临时属性datasource.datatest

package com.christ.demo.test;import com.christ.demo.DemoApplication;
import com.christ.demo.demos.service.test;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(properties = {"datasource.datatest=98765"})
class DemoApplicationTests {@Value("${datasource.datatest}")private String datatest;@Test
void test01(){System.out.println(datatest);
}
}

运行结果:
在这里插入图片描述
也可以使用args属性设置,如果两个都有设置,以args为准

package com.christ.demo.test;import com.christ.demo.DemoApplication;
import com.christ.demo.demos.service.test;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(properties = {"datasource.datatest=98765"},args={"--datasource.datatest=7654321"})
class DemoApplicationTests {@Value("${datasource.datatest}")private String datatest;@Test
void test01(){System.out.println(datatest);
}
}

在这里插入图片描述

加载测试专用配置bean

可以使用@Import(类名.class)给测试类注入bean,就可以在测试类中使用@Autowired注解自动装配使用类了。

@SpringBootTest
@Import(datasource.class)
class DemoApplicationTests {@Autowiredprivate datasource datasource;@Testvoid test01(){datasource.say();}
}

测试controller层

要测试controller,需要有web环境,可以在测试类中的@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)@AutoConfigureMockMvc开启虚拟mvc调用

@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)@Import(datasource.class)
@AutoConfigureMockMvc
//开启虚拟mvc调用
class DemoApplicationTests {@Test
void test01(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求,MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/users");//执行请求ResultActions actions = mvc.perform(builder);//然后可以定个各种响应的预期值,做断言判断,各个组成部分信息是否匹配StatusResultMatchers status = MockMvcResultMatchers.status();ResultMatcher ok = status.isOk();actions.andExpect(ok);HeaderResultMatchers header = MockMvcResultMatchers.header();ResultMatcher contentType = header.string("Context-Type", "application/json");actions.andExpect(contentType); ContentResultMatchers content = MockMvcResultMatchers.content();ResultMatcher json = content.json("{\"name\":\"christ\"}");actions.andExpect(json);}
}

在这里插入图片描述

测试使用事务回滚

不希望测试的时候产生的数据存储到数据库中,即不产生垃圾数据,可以在测试类中使用@Transaction注解。

数据层解决方案

数据源:druiddatasource
持久化技术:mybatis-plus或mybatis
数据库:mysql

如果配置文件中没有指定数据源,springboot默认的数据源是hikari,或者Tomcat中的datasource。

监控

  • 监控服务状态是否宕机
  • 日志
  • 各种服务运行指标,如内存,虚拟机,线程,请求
  • 管理服务,下线上线等

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

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

相关文章

飞书操作—学习笔记

1&#xff1a;推荐飞书的理由 这几年越来越多的公司开始使用飞书这一款软件&#xff0c;即是是一些大厂&#xff0c;也开始边缘化内部的通讯交流软件。那么飞书有那些功能能得到这样的青睐喃&#xff1f; 我个人总结&#xff0c;飞书有如下优势 1&#xff1a;飞书功能相对来…

24年银行从业资格考试报名照规格要求

24年银行从业资格考试报名照规格要求 #银行从业 #银行从业资格证 #银行从业考试 #银行从业资格考试 #银行从业资格证报名照片 #银从

Linux | 深入探究Linux进程控制:从fork函数到进程等待再到进程替换

目录 1、进程的创建&#xff1a;fork函数 2、父子进程的奇怪现象&#xff1a;为什么同一个地址有不同的值&#xff1f;——区分内存的虚拟地址和物理地址 代码&#xff1a;利用fork函数的返回值进行父子进程分流&#xff0c;执行不同的代码块 虚拟地址和物理地址&#xff1…

推荐编译器插件:Fitten Code 更快更好的AI助手

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【Linux 驱动】IMX6ULL gpio驱动

1. 概述 如果 pinctrl子系统将一个 PIN 复用为 GPIO 的话&#xff0c;那么接下来要用到 gpio 子系统了。gpio 子系统顾名思义&#xff0c;就是用于初始化 GPIO 并且提供相应的 API 函数&#xff0c;比如设置 GPIO为输入输出&#xff0c;设置读取 GPIO 的值等。 gpio 子系统的主…

MAE论文详解

文章目录 前言一、MAE理论二、MAE整体框架三、MAE简单实现四、实验总结 前言 MAE是Facebook团队在2021年11月发布的一篇论文&#xff0c;《Masked Autoencoders Are Scalable Vision Learners》&#xff0c;带掩膜的自编码器是可扩展的视觉学习器&#xff0c;MAE就是Masked Aut…

SpringBoot整合Liquibase

1、是什么&#xff1f; Liquibase官网 Liquibase是一个开源的数据库管理工具&#xff0c;可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用&#xff0c;并提供多种数据库任务自动化功能&#xff0c;例如数据库迁移、版本控制和监控。Li…

文本分类任务算法演变(二)

文本分类任务算法演变 1.深度学习-pipeline1.1fastText1.2LSTM1.2.1公式详解1.2.2可视化 1.3TextCNN1.4Gated CNN1.5TextRCNN1.6Bert1.6.1取[cls] token对应的向量1.6.2将整句话的向量取max/average pooling1.6.3将Bert编码后的向量再输入LSTM或CNN1.6.4将Bert中间层的结果取出…

Python生成432Hz音频

使用 numpy 来生成信号&#xff0c; 使用 matplotlib 可视化信号&#xff0c; 使用 sounddevice 播放声音。 以下生成和播放 432 Hz 的正弦波信号&#xff1a; import numpy as np import sounddevice as sd import matplotlib.pyplot as plt# 生成单音函数 def generate_to…

gstreamer系列 -- 获取媒体信息

Basic tutorial 9: Media information gathering

windows下的redis7.0.11的下载

天&#xff0c;我找redis7.0.11的安装包就找了好久&#xff0c;终于给我找到了。市面上好多是linux版本的。 安装包&#xff1a;Release Redis 7.0.11 for Windows zkteco-home/redis-windows GitHub 解压之后是这样的。 然后你要测试能不能启动&#xff1a; 1、指定配置文…

C语言-部分字符串函数详解 1-4

C语言-部分字符串函数详解 1-4 前言1.strlen1.1基本用法1.2注意事项\0size_t 1.3模拟实现 2.strcpy2.1基本用法2.2注意事项**源字符串必须以 \0 结束****会将源字符串中的 \0拷贝到目标空间****目标空间必须可修改****目标空间必须能容纳下源字符串的内容** 2.3模拟实现 3.strn…

RabbitMQ的核心概念

RabbitMQ是一个消息中间件&#xff0c;也是一个生产者消费者模型&#xff0c;负责接收&#xff0c;存储和转发消息。 核心概念 Producer 生产者&#xff0c;是RabbitMQ Server的客户端&#xff0c;向RabbitMQ发送消息。 Consumer 消费者&#xff0c;是RabbitMQ Server的客…

使用亮数据爬虫工具解锁复杂爬虫场景

在当今数据驱动型时代&#xff0c;数据采集和分析能力算是个人和企业的核心竞争力。然而&#xff0c;手动采集数据耗时费力且效率低下&#xff0c;而且容易被网站封禁。 我之前使用过一个爬虫工具&#xff0c;亮数据&#xff08;Bright Data&#xff09; &#xff0c;是一款低…

浅探空间智能

空间智能&#xff0c;这一概念在人工智能领域逐渐升温&#xff0c;部分归功于AI界的领军人物李飞飞博士所领导的创新项目。 Seeing is for doing and learning. 【精校】TED&#xff1a;李飞飞 | 空间智能让AI理解真实世界 2024.5 李飞飞在 X 上介绍称&#xff0c;「空间智能…

消防认证-火灾显示盘GB 17429-2011

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准&#xff0c;且通过了国家认证认可监督管理委员会审批&#xff0c;获得消防认证资质的认证机构颁发的证书&#xff0c;消防产品具有完好的防火功能&#xff0c;是住房和城乡建设领域验收的重要指标。 二、认证依据…

10结构型设计模式——桥接模式

一、桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是结构型的设计模式之一。桥接模式基于类的最小设计原则&#xff0c;通过使用封装&#xff0c;聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象&#xff08;abstraction&#xff09;与行为实…

SystemUI下拉框新增音量控制条

Android产品下拉框一直只有亮度条没有音量控制条。 为了方便控制音量&#xff0c;普遍都是底部导航栏添加音量加减按钮&#xff0c;在Android10以后&#xff0c;大家普遍用上了手势导航&#xff0c;去掉底部导航栏。 目前需要再下拉框中可以直接控制音量。 文章目录 前言需求及…

day33

一、linux系统中的库 库在linux系统中是一个二进制文件&#xff0c;它是由XXX.c&#xff08;不包含main函数&#xff09;文件编译而来的&#xff0c;分为静态库和动态库。 库在系统中的内容是不可见的&#xff0c;是一个二进制乱码 当程序需要使用库中的相关函数时&#xff0c;…

安装docker 遇到异常Could not resolve host: mirrorlist.centos.org; 未知的错误

问题 安装docker 遇到异常 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was 14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误” 1、安装Docker依赖包 yum install …