当前位置: 首页 > news >正文

springboot项目之websocket的坑:spring整合websocket后进行单元测试后报错的解决方案

前排提醒:还是博主菜,见识短浅,没遇到过这个问题。。。

起因

前段时间学习websocket和sse,写demo用了spring框架。后来又写了新的spring单元测试类demo去测试,结果启动后报错,报错信息提示websocket的相关错误,大概意思时由于测试环境缺少WebSocket相关配置或依赖所导致。

报错信息


java.lang.IllegalStateException: Failed to load ApplicationContextat org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98)at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124)at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)at org.junit.runners.ParentRunner.run(ParentRunner.java:413)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverEndpointExecutor' defined in class path resource [com/realpractice/demo/config/WebSocketConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: javax.websocket.server.ServerContainer not availableat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:745)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:420)at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90)... 27 more
Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not availableat org.springframework.util.Assert.state(Assert.java:76)at org.springframework.web.socket.server.standard.ServerEndpointExporter.afterPropertiesSet(ServerEndpointExporter.java:107)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)... 42 more

这是博主用的很简单的一个测试类:

import xxx.xxx.xxx.config.RedisConfig;
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.data.redis.core.RedisTemplate;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;import java.io.Serializable;@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
@ContextConfiguration(classes = RedisConfig.class) // 启用自定义配置
public class RedisTest {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Testpublic void test() {redisTemplate.opsForValue().set("test", "test");System.out.println(redisTemplate.opsForValue().get("test"));}
}

启动后报错:

刚开始有点懵,我都没测你websocket,你给我报个websocket的错。

学习一波。。。

根本原因是由于测试环境下没有websocket的环境,所以测试的时候需要注释掉它。并且测试中不选择让websocket加载有很多种方式,这个我们稍后再说。先来看看spring本身,既然报了websocket的错,说明spring本身去加载到了项目config目录下所有使用@Configuration注解的配置类。那么抛出我们第一个问题:为什么非 WebSocket 的测试类会加载 WebSocket 配置?

问题

为什么测试类会加载 WebSocket 配置?

这就不得不提到springboot的自动加载机制:

@SpringBootTest 会加载整个应用的上下文(包括所有 @Component, @Configuration, @Service 等)。

只要你的 WebSocketConfig 类被 @Configuration 或 @EnableWebSocket 标记,它就会被扫描并初始化。


那有的朋友又要问了,那我知道了springboot的自动加载机制,正常启动项目websocket也没错,为什么一使用测试就报错呢?不是说@SpringBootTest会加载整个应用的上下文吗?

嗯,博主看了下,原因好像是底层的依赖冲突,导致spring加载了错误的实现类。【详细原因的博主自己还没真正的测试过,就不妄下结论了。感兴趣的朋友直接浏览器搜索:“javax.websocket.server.ServerContainer not available”,跟着打波断点走下流程肯定能更明白整个逻辑】


多说一些关于sprngboot的相关知识把:

spring的组件扫描规则说白了就是"约定优于配置"的具体体现,即spring默认去加载所有可能的组件,减少显式配置。

还有一点是"上下文完整性":即spring确保测试环境和生产环境一致,避免因部分组件未加载导致测试结果不准确。

但也会带来一些副作用:测试启动变慢 和 依赖耦合,导致最终加载了不必要的组件,可能因它的初始化失败导致整个测试类失败。

解决

好好好,说了这么多怎么解决这个问题呢?

首先简单粗暴的办法就是在测试时把websocket相关代码全部注释掉,正常启动时再取消注释就可以了。(下下策)

我们可以把websocket的config写成根据不同配置选择是否加载,让其判断当前是否是测试环境,如果是则不加载websocket相关业务代码:

(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

通过注解参数 完全初始化 WebSocket 的基础设施,包括 ServerContainer。

明确指定了主配置类,并启动一个真实的嵌入式 web 服务器(而不仅仅是 mock 环境),并随机选择一个可用端口。

。。。总之是可以运行的。。。

内容还有待补充,有问题的朋友可以评论一起交流一下。文章如有错误劳驾读者朋友们指正,博主诚恳接受学习。谢谢大家。🌠

相关文章:

springboot项目之websocket的坑:spring整合websocket后进行单元测试后报错的解决方案

前排提醒&#xff1a;还是博主菜&#xff0c;见识短浅&#xff0c;没遇到过这个问题。。。 起因 前段时间学习websocket和sse&#xff0c;写demo用了spring框架。后来又写了新的spring单元测试类demo去测试&#xff0c;结果启动后报错&#xff0c;报错信息提示websocket的相关…...

在单片机编程中充分使用抽象工厂模式,确保对象创建的限制,多使用抽象接口避免多变具体实现类

背景 在软件架构设计上追求稳定,就必须多使用稳定的抽象接口,少依赖多变的实现;具体编码时可以充分使用抽象工厂模式 举例进行详细讲解和说明抽象工厂模式在单片机开发中的应用 抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组相关的对象创建封装到一个…...

喷泉码技术在现代物联网中的应用的总结和参考文献

总结 物联网与 5G 技术高速发展,数据传输对可靠性和实时性提出严苛要求。前向纠错码是增强通信鲁棒性的关键,但平衡冗余资源开销与编解码效率的矛盾是核心难题。LT 码和 Raptor 码是无率码典型。理论上它们能达渐进最优性能,然而实际系统受数据包规模、计算资源等限制,其工…...

vuex与vuex-persistedstate 插件固化数据

一&#xff0c;vuex与vuex-persistedstate 插件固化数据 的小案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Vuex基础案例</title></head><body><div id"app"&…...

如何在WordPress网站中设置双重验证,提升安全性

随着互联网的不断进步&#xff0c;网站的安全问题越来越受到重视。尤其对于WordPress这样常用的建站平台&#xff0c;安全性显得尤为重要。尽管WordPress自带一定的安全性&#xff0c;但仅依靠用户名和密码的登录方式仍然存在风险。因此&#xff0c;启用“双重验证”便成为了提…...

2025系统架构师---基于规则的系统架构风格‌

引言 在业务规则频繁变更、决策逻辑高度动态化的现代企业环境中&#xff0c;‌基于规则的系统架构风格‌&#xff08;Rule-Based System Architecture Style&#xff09;通过将核心业务逻辑抽象为‌可配置规则‌、‌规则引擎‌与‌决策服务‌的分离&#xff0c;实现了业务敏捷…...

Python排序中lambda函数详解

在 Python 中&#xff0c;lambda 函数是一种匿名函数&#xff0c;通常用于需要一个函数但又不想为其定义一个正式名称的情况。在排序操作中&#xff0c;lambda 函数用于指定排序的依据。 lambda 函数的基本语法 lambda 函数的基本语法如下&#xff1a; lambda arguments: ex…...

web 基础与 http 协议

目录 一 Web 基础 1. 域名和 DNS 1.1 域名的概念 1.2 DNS 2. 网页与HTML 2.1 HTML 概述 2.2 HTML 基本标签 2.3 网站和主页 3. 静态网页与动态网页 3.1 静态网页 3.2 动态网页 二 HTTP 协议 1. HTTP 协议概述 2. HTTP 方法 3. HTTP 状态码 4. HTTP 请求流程分析…...

记一次奇妙的Oracle注入绕WAF之旅

0x01 一个登陆框 上班时遇到了一个登陆框 看着这个复古的界面&#xff0c;于是上手除了admin123456之外顺手点了个 于是弹出了一条有意思的报错 这就有意思了&#xff0c;毕竟已经很久没在登陆框遇到sql注入了&#xff0c;当我想当然的认为万能密码可以秒时&#xff0c;事情出…...

python裁剪小说封面标题

一张矩形图片 比如50*100 大小 中心点的坐标是是(0,0) 左上角是(-25,50) 右上角是(25,50) 左下角是(-25,-50) 右下角是(25,-50) 我希望你能用python,帮我对本地指定图片切割大小&#xff0c;计算出该图片的中心坐标&#xff0c;然后按照我输入的长宽具体值&#xff0c;比…...

高性价比手机如何挑选?

这四个关键点&#xff0c;助你找到心仪机~ 一、性能强者&#xff1a;游戏娱乐畅快到底 处理器相当于手机的 “大脑”&#xff0c;处理速度快、能力强&#xff0c;运行大型游戏毫无压力。 搭配上大容量运存&#xff0c;多任务切换也能秒速完成&#xff0c;再也不怕游戏卡顿啦。…...

Java面试场景深度解析

Java面试场景深度解析 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于Java项目中的各种技术场景题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎来到我们公司的面试现场。请问您对Java内存模型…...

【DeepSeek认证】最好的MODBUS调试工具

根据搜索结果&#xff0c;MThings 和 Modbus Poll 是当前被广泛推荐且功能强大的MODBUS调试工具。以下是两者的详细对比及推荐理由&#xff1a; 1. MThings 核心优势&#xff1a; 主从一体化&#xff1a;支持同时模拟MODBUS主站和从站&#xff0c;无需切换工具即可完成双向调…...

欧莱雅集团:利用 Google Maps Platform Environment API 提供个性化护肤推荐

在欧莱雅集团&#xff0c;美丽绝不仅仅停留在表面。如今&#xff0c;这一点比以往任何时候都更加真实&#xff0c;因为公司将其深厚的科学专业知识与尖端技术相结合&#xff0c;以重塑美丽的未来。其成功的关键在于承诺不为科技而使用科技。其所有创新都满足了消费者的明确需求…...

2025三掌柜赠书活动第十五期:高并发系统:设计原理与实践

目录 前言 什么是高并发&#xff1f; 高并发系统的挑战 设计原理 1、分布式架构 2、缓存与异步处理 3、数据库优化 4、弹性扩展 实践方法 1、性能监控与分析 2、压力测试 3、故障排查与容错机制 关于《高并发系统&#xff1a;设计原理与实践》 编辑推荐 内容简介…...

【Spark入门】Spark架构解析:组件与运行机制深度剖析

1 Spark架构全景图 Apache Spark作为当今最流行的大数据处理框架之一&#xff0c;其卓越性能的背后是一套精心设计的分布式架构。理解Spark的架构组成和运行机制&#xff0c;对于性能调优和故障排查至关重要。 1.1 核心组件架构 组件交互流程&#xff1a; Driver初始化&#xf…...

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

交换机配置DHCP

交换机配置DHCP 背景先关闭路由器的DHCPconsole口连接到交换机配置交换机 背景 路由器的dhcp分配IP地址变慢&#xff0c;怎么处理 先关闭路由器的DHCP 查看路由器中DHCP地址池范围; 关闭路由器的DHCP console口连接到交换机 协议Serial端口COMX波特率9600流控无 配置交换机…...

【人工智能】边缘智能的突破:Ollama模型压缩技术与DeepSeek部署实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着边缘计算的兴起,将大型语言模型(LLM)部署到资源受限的边缘设备成为研究热点。Ollama凭借其高效的模型压缩技术和轻量级推理框架,为…...

基于STM32、HAL库的DS2401P安全验证及加密芯片驱动程序设计

一、简介&#xff1a; DS2401P是Maxim Integrated&#xff08;现为Analog Devices&#xff09;生产的一款1-Wire硅序列号芯片&#xff0c;具有以下特点&#xff1a; 64位唯一ROM编码&#xff08;包括8位家族码、48位序列号和8位CRC校验码&#xff09; 单总线接口&#xff0c;…...

日志收集之 logback使用

一 简介 1.1 Logback 是一个用于 Java 应用程序的强大日志框架&#xff0c;广泛应用于企业级应用中。它是由 SLF4J 的创始人开发的&#xff0c;旨在成为 Log4j 的替代品。Logback 提供更高级、更灵活的功能&#xff0c;同时还支持与 SLF4J 的无缝集成。 2.2 Logback分为下面几…...

Linux学习笔记(一):Linux下的基本指令

文章目录 Linux下的基本指令1. ls指令2. pwd指令3. cd指令4. touch指令5. mkdir指令&#xff08;牢记&#xff09;6. rmdir指令 && rm 指令&#xff08;牢记&#xff09;7. man指令&#xff08;牢记&#xff09;8. echo指令9. cp指令&#xff08;牢记&#xff09;10. m…...

Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)

一、使用介绍 官方网页&#xff1a;Ollama官方网址 中文文档参考&#xff1a;Ollama中文文档 相关教程&#xff1a;Ollama教程 使用版本&#xff1a;Unity 2022.3.53f1c1、Ollama 0.6.2 示例模型&#xff1a;llama3.2 二、运行示例 三、使用步骤 1、创建Canvas面板 具体…...

SDC命令详解:使用get_clocks命令进行查询

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 get_clocks命令用于创建一个时钟对象集合&#xff0c;关于设计对象和集合的更详细介绍&#xff0c;可以参考下面的博客。需要注意的是&#xff0c;在有些工具中还…...

git 修改用户名和邮箱

在 Git 中修改用户名和邮箱地址是常见的任务&#xff0c;这可以确保你的提交记录使用正确的身份信息。你可以通过简单的命令来完成这一操作。 全局配置 修改全局用户名 要修改全局的用户名&#xff0c;请执行以下命令&#xff1a; git config --global user.name "New…...

pg数据库删除模式

不能直接使用 DROP SCHEMA "app_sys" 删除&#xff0c; 这样会报错 cannot drop schema app sys 20250416 because other objects depend on it DETAlL: extension uuid-ossp depends on schema app sys 20250416sequence app sys 20250416.app sys id seq depend…...

【C++】Googletest应用

Googletest 1 配置 使用cmake配置&#xff1a; 具体文件后面上传补充 ./test.out --gtest_filterXXXTest.xxx 2 gdb 为了跟踪流程&#xff0c;可以使用gdb&#xff1b; gdb ./xxx.out gdb --args ./gtest --gtest_filterxxx.xxx设置运行参数 set args --gtest_filterxxx.…...

QgraphicsView异步线程加载地图瓦片

本节主要记录一下qt开发过程中离线地图瓦片的加载方式&#xff0c;瓦片加载选择graphicsView控件&#xff0c;同时为了不影响主线程事件和其他操作&#xff0c;这里采用了异步线程的操作&#xff0c;将地图瓦片加载的步骤放到了异步子线程之中。注&#xff1a;本记录仅为本人笔…...

机器学习day2

使用KNN算法实现机器学习 给我一个苹果的图片 我能预测出这个是一个苹果 代码&#xff1a; # 导入需要的库 # 读图 import os import cv2 # 绘图 import matplotlib.pyplot as plt import seaborn as sns # 数组 import numpy as np from skimage.feature import hog from sk…...

jquery解决谷歌浏览器自动保存加密密码是乱码

添加一个隐形的input框&#xff0c;提交隐藏input框里的数据&#xff0c;展示框展现的还是明文密码&#xff0c;并且不提交展示框的值 <formid"loginForm"class"form-signin newForm-signin"action"${ctx}/login"method"post"onsub…...

Python 如何操作数据库,让你使用 DeepSeek 开发数据库应用更加快 (Orm Bee)

Python 如何操作数据库&#xff0c;让你使用 DeepSeek 开发数据库应用更加快 操作数据库最好用 ORM 工具&#xff0c;可以提高开发效率. ORM 就是实体与数据库表的映射&#xff0c;让我们可以用面向对象的方式来操作数据库. 简单易用&#xff0c;直接上代码. 使用Orm Bee操作…...

如何解决 Linux 文件系统挂载失败的问题

以下是解决Linux文件系统挂载失败问题的系统性排查与解决方案&#xff1a; 一、设备基础检查 确认设备识别状态‌ 执行 lsblk 或 fdisk -l 查看磁盘设备列表&#xff0c;验证目标设备&#xff08;如 /dev/sdb1&#xff09;是否被系统识别。 若设备未显示&#xff0c;需排查&a…...

JVM——引入

什么是JVM&#xff1f;它与JDK、JRE的关系&#xff1f; JVM、JRE 和 JDK 是 Java 平台的三个核心组件&#xff0c;各自承担着不同的职责&#xff0c;它们之间的关系密不可分。理解它们的区别和联系有助于更好地开发、部署和运行 Java 应用程序。对于 Java 开发者来说&#xff…...

Golang|工厂模式

工厂模式是一种创建型设计模式&#xff0c;它的核心思想是&#xff1a;把对象的创建过程封装起来&#xff0c;不直接在代码中 new 一个对象&#xff0c;而是通过一个“工厂”来生成对象。这样做的好处是&#xff1a; 降低了代码之间的耦合&#xff08;依赖具体类减少&#xff0…...

Transformer数学推导——Q29 推导语音识别中流式注意力(Streaming Attention)的延迟约束优化

该问题归类到Transformer架构问题集——注意力机制——跨模态与多模态。请参考LLM数学推导——Transformer架构问题集。 在语音识别任务中&#xff0c;实时性是核心需求 —— 想象你使用语音助手时&#xff0c;每说完一个词就希望即时看到文字反馈&#xff0c;而不是等整句话说…...

dx11 龙书学习 第四章 dx11 准备工作

4.1 准备工作 Direct3D的初始化过程要求我们熟悉一些基本的Direct3D类型和基本绘图概念&#xff1b;本章第一节会向读者介绍些必要的基础知识。然后我们会详细讲解Direct3D初始化过程中的每一个必要步骤&#xff0c;并顺便介绍一下实时绘图应用程序必须使用的精确计时和时间测…...

运维打铁:域名详解及常见问题解决

文章目录 前言一、域名基础概念1. 什么是域名2. 域名结构3. 域名解析 二、域名工作原理1. DNS 服务器层次结构2. 域名解析过程 三、常见域名问题及解决办法1. 域名无法解析2. 域名解析延迟3. 域名解析结果不一致 四、总结 前言 在当今数字化的时代&#xff0c;互联网已经成为我…...

【大模型ChatGPT+R-Meta】AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表“

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面&#xff0c;成为Science、Nature论文的…...

ElasticSearch深入解析(五):如何将一台电脑上的Elasticsearch服务迁移到另一台电脑上

文章目录 0.安装数据迁移工具1.导出数据2.导出mapping3.导出查询模板4.拷贝插件5.拷贝配置6.导入到目标电脑上 0.安装数据迁移工具 Elasticsearch dump是一个用于将Elasticsearch索引数据导出为JSON格式的工具。你可以使用Elasticsearch dump通过命令行或编程接口来导出数据。…...

QT中的多线程

Qt中的多线程和Linux中的线程本质是相同的&#xff0c;Qt中针对系统提供的线程API进行了重新封装 QThread类 Qt中的多线程一般通过QThread类实现&#xff0c;要想创建线程就要创建这个类的实例 QThread代表一个在应用程序中可以独立控制的线程&#xff0c;也可以和进程中的其…...

Win11安装Ubuntu20.04简记

写在前面 之前装的22.04&#xff0c;不稳定&#xff0c;把22.04卸载了&#xff0c;重新安装20.04系统。这里主要把卸载和安装的过程中参考到的博客在这记录一下。 卸载ubuntu系统参考的博文 卸载参考博文1 卸载参考博文2 Ubuntu20.04安装参考博文 安装参考博文1 安装参考博…...

电子电器架构 ---电气/电子架构将在塑造未来出行方面发挥啥作用?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

pdf.js移动端预览PDF文件时,支持双指缩放

在viewer.html中添加手势缩放代码 <script>// alert("Hello World");let agent navigator.userAgent.toLowerCase();// if (!agent.includes("iphone")) {let pinchZoomEnabled false;function enablePinchZoom(pdfViewer) {let startX 0, start…...

机器人--激光雷达

教程 教程 激光雷达 激光 激光&#xff08;Laser&#xff09;&#xff0c;是一种人造的、高度纯净的单色光。 雷达 激光器旋转机构雷达。 雷达根据激光探头发出激光束的数量&#xff0c;一般可以分为单线激光雷达(2D激光雷达)和多线激光雷(3D激光雷达)。 作用 测距原理 激…...

最新ios开发证书/发布证书/免费证书/企业证书制作教程

本文介绍了如何制作或者苹果开发证书p12文件&#xff0c;含开发证书&#xff0c;推送证书&#xff0c;发布证书&#xff0c;企业证书&#xff0c;免费证书&#xff0c;您在iphone和ipad开发构建 IOS App 应用和苹果ios app签名需要用到。如果嫌麻烦&#xff0c;可以使用懒人工具…...

【Keil5-开发指南】

Keil5-编程指南 ■ Keil5 介绍■ J-Flash 使用■ Keil5-Debug调试工具 Jlink---STLink---DAP仿真器■ Keil5 使用 AStyle插件格式化代码■ Keil5-编译4个阶段■ Keil5-Boot和APP配置■ Keil5-报错■ 芯片手册区别 ■ Keil5 介绍 Keil5 介绍 ■ J-Flash 使用 J-Flash 使用 ■…...

蓝桥杯 18. 机器人繁殖

机器人繁殖 原题目链接 题目描述 X 星系的机器人可以自动复制自己。它们用 1 年的时间可以复制出 2 个自己&#xff0c;然后就失去复制能力。 每年 X 星系都会选出 1 个新出生的机器人发往太空。也就是说&#xff0c;如果 X 星系原有机器人 5 个&#xff0c;1 年后总数是&a…...

从微服务到AI服务:Nacos 3.0如何重构下一代动态治理体系?

在现代微服务架构的浪潮中&#xff0c;Nacos早已成为开发者手中的“瑞士军刀”。作为阿里巴巴开源的核心中间件&#xff0c;它通过动态服务发现、统一配置管理和服务治理能力&#xff0c;为云原生应用提供了坚实的基石。从初创公司到全球500强企业&#xff0c;Nacos凭借其开箱即…...

60、微服务保姆教程(三)Sentinel---高可用流量管理框架/服务容错组件

Sentinel—高可用流量管理框架/服务容错组件 一.为什么要用Sentinel? 1.微服务架构中当某服务挂掉的时候常见的原因有哪些? 1.异常没处理 比如DB连接失败,文件读取失败等 2.突然的流量激增 比如:用户经常会在京东、淘宝、天猫、拼多多等平台上参与商品的秒杀、限时抢…...

[特殊字符] 基于Docker部署Nacos注册中心及微服务注册发现详解(含MySQL持久化配置)

&#x1f4da; 目录 项目背景与准备 Docker部署Nacos并配置MySQL持久化 微服务注册到Nacos&#xff08;item-service示例&#xff09; 微服务服务发现与调用&#xff08;cart-service示例&#xff09; 小结 1. 项目背景与准备 在微服务架构中&#xff0c;服务注册与发现是…...