Springboot学习笔记——3
Springboot学习笔记——3
- 一、热部署
- 1.1、手动启动热部署
- 1.2、自动启动热部署
- 1.3、热部署范围配置
- 1.4、关闭热部署
- 二、配置高级
- 2.1、第三方bean属性绑定
- 2.2、松散绑定
- 2.3、常用计量单位应用
- 2.4、bean属性校验
- 2.5、进制数据转换规则
- 三、测试
- 3.1、加载测试专用属性
- 3.2、加载测试类专用配置
- 3.3、测试类中启动web环境
- 3.4、发送虚拟请求
- 3.5、匹配响应执行状态
- 3.6、匹配响应体
- 3.7、匹配响应头
- 3.8、业务层测试事务回滚
- 3.9、测试用例设置随机数据
- 四、数据层解决方案
- 4.1、SQL
- 4.1.1、内置数据源
- 4.1.2、jdbcTemplate
- 4.1.3、H2数据库
- 4.2、NoSQL
- 4.2.1、redis下载安装与基本使用
- 4.2.2、springboot整合redis
- 4.2.3、Springboot读写Redis的客户端
- 4.2.4、springboot操作Redis客户端实现技术切换(jedis)
- 4.2.5、Mongodb
- 4.2.6、Mongodb下载与安装
一、热部署
1.1、手动启动热部署
- 开启开发者工具
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
-
激活热部署:Ctrl + F9
-
关于热部署
- 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
- 重载(ReLoad):jar包,加载位置base类加载器
1.2、自动启动热部署
- 设置自动构建项目
- IDEA失去焦点5秒以后启动热部署
1.3、热部署范围配置
-
默认不触发重启的目录列表
- /META-INF/maven
- /META-INF/resources
- /resources
- /static
- /public
- /templates
-
自定义不参与重启排除项
devtools:restart:exclude: public/**,static/**
1.4、关闭热部署
- 设置高优先级属性禁用热部署
@SpringBootApplication
public class SsmpApplication {public static void main(String[] args) {System.setProperty("spring.devtools.restart.enabled","false");SpringApplication.run(SsmpApplication.class);}
}
二、配置高级
2.1、第三方bean属性绑定
- 使用@ConfigurationProperties为第三方bean绑定属性
@Bean
@ConfigurationProperties(prefix = "datasources")
public DruidDataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();return dataSource;
}
datasources:driverClassName: com.mysql.cj.jdbc.Driver
- @EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器
@SpringBootApplication
@EnableConfigurationProperties(serverConfig.class)
public class Springboot0701Application {@Bean@ConfigurationProperties(prefix = "datasources")public DruidDataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();return dataSource;}public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(Springboot0701Application.class, args);DruidDataSource dataSource= run.getBean(DruidDataSource.class);System.out.println(dataSource.getDriverClassName());serverConfig serverConfig = run.getBean(serverConfig.class);System.out.println(serverConfig.toString());}
}
//@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class serverConfig {private String ipAddress;private int port;private long timeout;
}
注意事项
@EnableConfigurationProperties和@Component不能同时使用
- 解除使用@ConfigurationProperties注释警告
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
2.2、松散绑定
- ConfigurationProperties绑定属性支持属性名宽松绑定
public class serverConfig {private String ipAddress;private int port;private long timeout;
}
- 以下格式都支持
ip-Address: 189.176.0.1
ip_Address: 189.176.0.1
ipaddress: 189.176.0.1
IPADDRESS: 189.176.0.1 # 常量模式
ip-address: 189.176.0.1 # 烤肉串模式
注意事项
宽松绑定不支持注解@Value引用单个属性的方式
2.3、常用计量单位应用
- Springboot支持JDK8提供的时间与空间计量单位
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class serverConfig {private String ipAddress;private int port;private long timeout;@DurationUnit(ChronoUnit.HOURS)private Duration serverTimeout;@DataSizeUnit(DataUnit.MEGABYTES)private DataSize dataSize;
}
2.4、bean属性校验
- 开启数据校验有助于系统安全性,J2EE规范中JSR303规范定义了一组有关数据校验相关的API
- 添加3SR303规范坐标与Hibernate校验框架对应坐标
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId>
</dependency><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId>
</dependency>
- 对Bean开启校验功能
@Component
@Data
@ConfigurationProperties(prefix = "servers")
//2. 开启对当前bean的属性注入校验
@Validated
public class serverConfig {
}
- 设置校验规则
@Component
@Data
@ConfigurationProperties(prefix = "servers")
//2. 开启对当前bean的属性注入校验
@Validated
public class serverConfig {private String ipAddress;//3.设置具体的规则@Max(value = 8888,message = "最大值不能超过8888")@Min(value = 202,message = "最小值不能小于202")private int port;private long timeout;@DurationUnit(ChronoUnit.HOURS)private Duration serverTimeout;@DataSizeUnit(DataUnit.MEGABYTES)private DataSize dataSize;
}
2.5、进制数据转换规则
- 字面值表达式导致出现问题
int: 0123 # 会判断为八进制的123导致转换出现问题
注意yaml文件中对于数字的定义支持进制书写格式,如需使用字符串请使用引号明确标注
string: "0123"
三、测试
3.1、加载测试专用属性
- 启动测试环境时可以通过properties参数设置测试环境专用的属性
//properties属性可以为当前测试用例添加临时的属性配置
@SpringBootTest(properties = {"test.prop=testValue2"})
public class propertiesAndArgsTest {@Value("${test.prop}")private String msg;@Testvoid testProperties(){System.out.println(msg);}
}
- 优势:比多环境开发中的测试环境影响范围更小,仅对当前测试类有效
- 在启动测试环境时可以通过args参数设置测试环境专用的传入参数
//args属性可以为当前测试用例添加临时的命令行参数
SpringBootTest(args = {"--test.prop=testValue3"})
public class propertiesAndArgsTest {@Value("${test.prop}")private String msg;@Testvoid testProperties(){System.out.println(msg);}
}
3.2、加载测试类专用配置
- 使用@Import注解加载当前测试类专用的配置
@SpringBootTest
@Import({MsgConfig.class})
public class ConfigTest {@Autowiredprivate String msg;@Testvoid test1(){System.out.println(msg);}
}
- 可以加载测试范围配置应用于小范围测试环境
3.3、测试类中启动web环境
- 模拟端口
package com.smulll;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class Springboot0801ApplicationTests {@Testvoid contextLoads() {}
}
3.4、发送虚拟请求
- 虚拟请求测试
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
class Springboot0801ApplicationTests {@Testvoid testWeb(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求,当前访问/booksMockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");//执行请求ResultActions perform = mvc.perform(builder);}
}
3.5、匹配响应执行状态
- 虚拟请求状态匹配
@Test
void testStatus(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求,当前访问/booksMockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");//执行请求ResultActions perform = mvc.perform(builder);//设置预期值与真实值进行比较,测试成功通过,失败测试停止//定义本次调用的预期值StatusResultMatchers status = MockMvcResultMatchers.status();//预计本次调用的成功值,状态200ResultMatcher ok = status.isOk();//添加预计值到本次调用过程中进行匹配perform.andExpect(ok);
}
3.6、匹配响应体
- 虚拟请求体匹配
@Test
void testBody(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求,当前访问/booksMockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");//执行请求ResultActions perform = mvc.perform(builder);//设置预期值与真实值进行比较,测试成功通过,失败测试停止//定义本次调用的预期值ContentResultMatchers content = MockMvcResultMatchers.content();//预计本次调用执行结果ResultMatcher result = content.string("springboot");//添加预计值到本次调用过程中进行匹配perform.andExpect(result);
}
- 虚拟请求体(json)匹配
@Test
void testJSON(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求,当前访问/booksMockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");//执行请求ResultActions perform = mvc.perform(builder);//设置预期值与真实值进行比较,测试成功通过,失败测试停止//定义本次调用的预期值ContentResultMatchers content = MockMvcResultMatchers.content();//预计本次调用执行结果ResultMatcher result = content.json("{\n" +" \"id\": 1,\n" +" \"type\": \"springboot\",\n" +" \"name\": \"springboot\",\n" +" \"description\": \"springboot\"\n" +"}");//添加预计值到本次调用过程中进行匹配perform.andExpect(result);
}
3.7、匹配响应头
- 虚拟请求头匹配
@Test
void testContentType(@Autowired MockMvc mvc) throws Exception {//创建虚拟请求,当前访问/booksMockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");//执行请求ResultActions perform = mvc.perform(builder);//设置预期值与真实值进行比较,测试成功通过,失败测试停止//定义本次调用的预期值HeaderResultMatchers Header = MockMvcResultMatchers.header();//预计本次调用执行结果ResultMatcher string = Header.string("Content-Type", "application/json");//添加预计值到本次调用过程中进行匹配perform.andExpect(string);
}
3.8、业务层测试事务回滚
- 为测试用例添加事务,SpringBoot会对测试用例对应的事务提交操作进行回滚
@SpringBootTest
@Transactional
public class TestSave {@Autowiredprivate bookServer bookServer;
}
- 如果想在测试用例中提交事务,可以通过@Rollback注解设置
@SpringBootTest
@Transactional
@Rollback(false)
public class TestSave {
}
3.9、测试用例设置随机数据
- 测试用例数据通常采用随机值进行测试,使用SpringBoot提供的随机数为其赋值
testcase:book:id: ${random.int}name: ${random.value} #随机字符串,MDS字符串,32位type: ${random.int(10,100)}uuid: ${random.uuid} #随机uuidpublishTime: ${random.long}
${random.int}
表示随机整数${random.int(10)}
表示10以内的随机数${random.int(10,20)}
表示10到20的随机数- 其中
()
可以是任意字符,例如[]
,!!
均可
四、数据层解决方案
4.1、SQL
4.1.1、内置数据源
- 现有数据层解决方案技术选型
Druid + MyBatis-Plus + MySQL
- 数据源:DruidDataSource
- 持久化技术:MyBatis-Plus+MyBatis
- 数据库:MySQL
- SpringBoot提供了3种内嵌的数据源对象供开发者选择
- HikariCP:默认内置数据源对象
- Tomcat提供DataSource:HikariCP不可用的情况下,且在web环境中,将使用tomcat服务器配置的数据源对象
- Commons DBCP:Hikari不可用,tomcat数据源也不可用,将使用dbcp数据源
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springbootbase?serverTimezone=UTCusername: rootpassword: 123456
- 通用配置无法设置具体的数据源配置信息,仅提供基本的连接相关配置,如需配置,在下一级配置中设置具体设定
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springbootbase?serverTimezone=UTCusername: rootpassword: 123456hikari:maximum-pool-size: 50
4.1.2、jdbcTemplate
- 内置持久化解决方案——JdbcTemplate
@SpringBootTest
class Springboot0901ApplicationTests {@Testvoid testJdbc(){String sql = "select * from tb_book where id=1";List<Book> list = jdbcTemplate.query(sql, new RowMapper<Book>() {@Overridepublic Book mapRow(ResultSet rs, int rowNum) throws SQLException {Book book = new Book();book.setId(rs.getInt("id"));book.setName(rs.getString("name"));book.setType(rs.getString("type"));book.setDescription(rs.getString("description"));return book;}});System.out.println(list);}
}
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
spring:
jdbc:template:query-timeout: -1 #查询超时时间max-rows: 500 #最大行数fetch-size: -1 #缓存行数
4.1.3、H2数据库
-
springBoot提供了3种内嵌数据库供开发者选择,提高开发测试效率
- H2
- HSQL
- Derby
-
导入H2相关坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope>
</dependency>
- 设置当前项目为web工程,并配置H2管理控制台参数
server: port: 80
spring:h2:console: path: /h2enabled: true
- 访问用户名sa,默认密码123456
- 设置访问的数据源
server:port: 80
spring:h2:console:path: /h2enabled: truedatasource:driver-class-name: org.h2.Driverurl: jdbc:h2:~/testusername: sapassword: 123456
- H2数据库控制台仅用于开发阶段,线上项目请务必关闭控制台功能
server:port: 80
spring:h2:console:path: /h2enabled: false
4.2、NoSQL
4.2.1、redis下载安装与基本使用
-
Redis是一款key-value存储结构的内存级NoSQL数据库
- 支持多种数据存储格式
- 支持持久化
- 支持集群
-
redis下载
redis下载(Windows) -
安装启动
- Windows解压安装或一键式安装
- 服务端启动命令
redis-server.exe redis.windows.conf
- 客户端启动命令
redis-cli.exe
4.2.2、springboot整合redis
- 导入SpringBoot整合Redis坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置Redis(采用默认配置)
spring:data:redis:host: localhostport: 6379
- 主机:localhost(默认)
- 端口:6379(默认)
- RedisTemplate提供操作各种数据存储类型的接口API
- 客户端:RedisTemplate
@SpringBootTest
class Springboot10RedisApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid set() {ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("age",19);}@Testvoid get(){ValueOperations valueOperations = redisTemplate.opsForValue();Object o = valueOperations.get("age");System.out.println(o);}
}
4.2.3、Springboot读写Redis的客户端
- StringRedisTemplate以字符串作为key和value,与Redis客户端操作等效
@SpringBootTest
public class RedisTest {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testvoid Demo1(){ValueOperations<String, String> ops = stringRedisTemplate.opsForValue();System.out.println(ops.get("name"));}
}
4.2.4、springboot操作Redis客户端实现技术切换(jedis)
- 配置客户端
spring:data:redis:host: localhostport: 6379client-type: jedis
- 配置客户端专用属性
spring:data:redis:host: localhostport: 6379client-type: jedislettuce:pool:max-active: 16jedis:pool:max-active: 16
- lettcus与jedis区别
- jedis连接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响。
- lettcus基于Netty框架进行与Redis服务器连接,底层设计中采用StatefulRedisConnection。StatefulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用。当然lettcus也支持多连接实例一起工作。
4.2.5、Mongodb
- MongoDB是一个开源、高性能、无模式的文档型数据库。NoSQL数据库产品中的一种,是最像关系型数据库的非关系型数据库
- 淘宝用户数据
- 存储位置:数据库
- 特征:永久性存储,修改频度极低
- 游戏装备数据、游戏道具数据
- 存储位置:数据库、Mongodb
- 特征:永久性存储与临时存储相结合、修改频度较高
- 直播数据、打赏数据、粉丝数据
- 存储位置:数据库、Mongodb
- 特征:永久性存储与临时存储相结合,修改频度极高
- 物联网数据
- 存储位置:Mongodb
- 特征:临时存储,修改频度飞速
4.2.6、Mongodb下载与安装
- Windows版Mongo下载
- 下载地址
- Windows版Mongo安装
- 解压后设置数据目录
- Windows版Mongo启动
- 服务端启动
mongod --dbpath=..\data\db
- 客户端启动
mongo --host=127.0.8.1 --port=27017
相关文章:

Springboot学习笔记——3
Springboot学习笔记——3 一、热部署1.1、手动启动热部署1.2、自动启动热部署1.3、热部署范围配置1.4、关闭热部署 二、配置高级2.1、第三方bean属性绑定2.2、松散绑定2.3、常用计量单位应用2.4、bean属性校验2.5、进制数据转换规则 三、测试3.1、加载测试专用属性3.2、加载测试…...

jupyter 切换虚拟环境
当前只有两个环kernel 我已经创建了很多虚拟环境,如何在notebook中使用这些虚拟环境呢?请看下面 比如说我要添加nlp 这个虚拟环境到notebook中 1. 切换到nlp环境 2. 安装如下模块 pip install ipykernel 3. 执行如下命令 python -m ipykernel install …...

如何在Apache和Resin环境中实现HTTP到HTTPS的自动跳转:一次全面的探讨与实践
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

安全防御—密码学
1. 什么是APT? APT(Advanced Persistent Threat)是指高级持续性威胁,本质是针对性攻击。 利用先进的攻击手段对特定目标进行长期持续性网络攻击的攻击形式,APT攻击的原理相对于其他攻击形式更为高级和先进,…...

灯具从深圳寄国际物流到墨西哥
在国际贸易的日益频繁的今天,越来越多的企业开始将产品销往海外市场。然而,如何将这些产品安全、快速地送达目的地,成为了每个企业都需要面对的问题。对于灯具这种重量大、体积大的物品来说,如何选择合适的国际物流方式࿰…...
spark3使用hive zstd压缩格式总结
ZSTD(全称为Zstandard)是一种开源的无损数据压缩算法,其压缩性能和压缩比均优于当前Hadoop支持的其他压缩格式,本特性使得Hive支持ZSTD压缩格式的表。Hive支持基于ZSTD压缩的存储格式有常见的ORC,RCFile,Te…...

直线导轨精度等级在设备中有什么影响?
直线导轨的精度选择是直线导轨应用中的重要环节,需要根据具体的应用场景和设备要求来选择合适的精度等级(常见分3个等级:N/H/P)。下面我们来详细了解一下直线导轨的精度选择。 1、精度等级的概念:直线导轨的精度等级是…...

windows平台FairMOT的实现
环境:python3.6pytorch1.1.0torchvision0.3.0cuda9.2vs2015 该项目需要装3个c库(dcn_v2,apex,cython_bbox)特别坑,各种环境不匹配,各种bug。本人c小白,但是一路摸索总算成功了。下面…...
系统架构设计:12 论软件维护方法及其应用
目录 一 软件维护方法 1 影响软件维护工作的因素 2 软件维护类型 (1)正确性维护...
SS命令使用介绍
ss 一. 命令介绍 先使用手册查看命令介绍信息 NAME ss - another utility to investigate sockets DESCRIPTION ss is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and state informations than other tools.…...

让你的对象变得拗口:JSON.stringify(),我把对象夹进了 JSON 魔法帽!
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 引言 1. JSON.stringify() 属性 replacer …...

TDengine时序数据库学习使用
数据库要求: 1.目前服务器只能在linux运行,先安装服务器版本v1 2.下载与v1完全匹配的客户端版本v1(客户端与服务器的版本号不匹配可能访问不了服务器) 第一步 安装 安装服务器注意,安装教程: 使用安装…...

算法通过村第十三关-术数|青铜笔记|数字与数学
文章目录 前言数字统计专题符号统计阶乘0的个数 溢出问题整数反转字符串转整数回文数 进制专题七进制数进制转换 总结 前言 提示:生活是正着来生活,倒着去理解。 --戴维迈尔斯《社会心理学》 数学是学生时代掉头发的学科,那算法是毕业后掉头发…...

【SpringMVC篇】详解SpringMVC入门案例
🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎍SpringMVC简介⭐优点 🌺SpringMVC入门…...
Programming abstractions in C阅读笔记:p166-p175
《Programming Abstractions In C》学习第58天,p166-p175总结。 一、技术总结 1.斐波那契数列(Fibonacci Sequenc) (1)斐波那契数列来源 斐波那契数列来自于《Liber Abaci》一书里兔子繁殖问题,相关资料很多,这里不赘述。 (2)关于《Libe…...

【List-Watch】
List-Watch 一、定义二、工作机制三、调度过程 一、定义 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 …...
Pytorch因nn.Parameter导致实验不可复现的一种情况
文章首发见博客:https://mwhls.top/4871.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议,私信不回。 没解决,只是记录这种情况。 也可以多次实验取均值以避免结果复现。 场景 自己的模块中&a…...
MySQL表名区分不区分大小写,规则是怎样
MySQL表名区分不区分大小写,规则是怎样 mysql在linux中表名区分大小写,mysql在Windows中表名不区分大小写;可以在MySQL的配置文件“my.ini [mysqld]”中增加一行“lower_case_table_names 参数”来设置是否区分大小写。 mysql的表名区分大小写…...
Design patterns--观察者模式
设计模式之观察者模式 代码示例 #ifndef OBSERVER_H #define OBSERVER_H#include <map>class Observer { public:Observer();virtual void update(std::map<int, double>) 0; }; #endif // OBSERVER_H#include "observer.h"Observer::Observer() {}#if…...

【Spring Boot】SpringBoot 单元测试
SpringBoot 单元测试 一. 什么是单元测试二. 单元测试的好处三. Spring Boot 单元测试单元测试的实现步骤 一. 什么是单元测试 单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。 二. 单元测试的好处…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...