基于SpringBoot + Vue的医院预约挂号系统(角色:用户、医生、管理员)

文章目录

  • 前言
  • 一、详细操作演示视频
  • 二、具体实现截图
  • 三、技术栈
    • 1.前端-Vue.js
    • 2.后端-SpringBoot
    • 3.数据库-MySQL
    • 4.系统架构-B/S
  • 四、系统测试
    • 1.系统测试概述
    • 2.系统功能测试
    • 3.系统测试结论
  • 五、项目代码参考
  • 六、数据库代码参考
  • 七、项目论文示例
  • 结语

前言

💛博主介绍:
     作为资深全栈程序员🎉,我专注于Java、小程序/APP、python、大数据等技术领域和大学生毕业设计支持。凭借丰富的开发经验和深入的技术解析,我在此分享实用的编程资源、源代码,并提供定制化技术咨询💡。致力于协助学生在毕业设计中取得成功我的目标是让技术学习变得更高效、更有趣。欢迎关注👋,一起在计算机科学的海洋中乘风破浪⛵️,共创辉煌🏆。
👇🏻 精选专栏,推荐订阅👇🏻
计算机毕业设计最强指南✅
计算机最全毕设项目推荐✅
文末附上源码
     欢迎各位同学在评论区或通过私信提出关于毕业设计的问题,我将尽我所能,为大家提供有价值的建议和指导,帮助每位学生在毕业设计的道路上少走弯路,更高效地完成毕设!

一、详细操作演示视频

        承诺所发文章的项目皆有视频和源码,若发现任何不实之处,我将无条件为您提供完全免费的技术支持,涵盖软件开发等各项服务!❗️❗️❗️

二、具体实现截图

img

image-20240903223053760

image-20240903223059017

image-20240903223102151

image-20240903223105352

image-20240903223109772

image-20240903223113997

三、技术栈

请留意,技术选型应依据实际项目需求而定,以下内容仅供参考!

1.前端-Vue.js

        Vue.js 是由尤雨溪在 2014 年推出的轻量级前端 JavaScript 框架,以其易学易用和高效的数据绑定机制而广受欢迎。它专注于视图层,易于与其他库或现有项目集成,特别适合中小型项目。
        Vue.js 的响应式数据绑定是其核心特性之一,它允许开发者通过声明式的数据绑定,自动更新 DOM,从而简化了前端开发流程,使开发者能够更专注于业务逻辑。此外,Vue.js 提供了强大的组件系统,支持单文件组件,使得开发者能够以模块化方式构建复杂的用户界面,提高了代码的可复用性和可维护性。
        Vue.js 的生态系统包括 Vuex 状态管理和 Vue Router 路由管理等工具,这些工具极大地方便了单页应用(SPA)的开发。Vue 3 的推出,引入了 Composition API、改进的响应式系统和性能优化,进一步提升了开发体验和应用性能。

2.后端-SpringBoot

        Spring Boot 是 Spring 框架的扩展,旨在简化 Spring 应用的创建和开发。它通过提供“Starters”来简化依赖管理和配置,使得开发者能够快速启动和运行应用。Spring Boot 遵循“约定优于配置”的原则,自动配置了许多常见的设置,如内嵌的 Tomcat 服务器,从而减少了手动配置的需要。
        Spring Boot 的自动配置功能能够根据项目依赖自动调整应用配置,如数据库连接和实体管理,极大地提高了开发效率。此外,它还包含了 Actuator 模块,用于监控和管理应用,提供应用健康状态、度量信息和环境信息等,这对于生产环境中的监控和问题诊断至关重要。
        Spring Boot 也支持微服务架构,与 Spring Cloud 集成,使得构建分布式系统变得简单。Spring Cloud 提供了服务发现、配置管理、断路器等微服务组件,帮助开发者构建和管理复杂的微服务系统。

3.数据库-MySQL

        MySQL 是一种广泛使用的开源关系型数据库管理系统(RDBMS),基于 SQL(Structured Query Language)进行数据管理。它最初由瑞典的 MySQL AB 开发,后来被 Sun Microsystems 收购,最终成为 Oracle 公司的产品。MySQL 是最流行的数据库技术之一,特别适用于 Web 应用开发,因其高性能、可靠性和易用性而受到青睐。
        MySQL 的核心特性包括支持多种操作系统平台、提供强大的数据安全和备份功能、以及拥有一个活跃的社区支持。它支持广泛的应用程序,从小型应用到大型企业级应用,都能够提供有效的数据存储解决方案。
        作为一个关系型数据库,MySQL 使用表格来组织数据,并通过索引来优化查询性能。它支持多种数据类型,包括数值、日期和时间、字符串等,能够满足不同应用场景的需求。MySQL 还提供了事务处理、子查询、触发器和存储过程等高级数据库功能,这些功能使得开发者能够构建复杂的数据库逻辑。

4.系统架构-B/S

        B/S(Browser/Server)架构是现代网络应用开发中的主流模型,它将用户界面集中在浏览器端,而服务器端则负责处理业务逻辑和数据存储。这种架构的优势在于其跨平台性和易维护性,用户无需在本地安装软件,只需通过浏览器即可访问应用,无论其操作系统如何。
        在 B/S 架构中,前端技术如 HTML、CSS 和 JavaScript 用于构建用户界面,而后端则处理数据和业务逻辑。前后端通过 HTTP 或 HTTPS 协议通信,通常使用 JSON 或 XML 格式交换数据。这种分离的模式促进了前后端独立开发,提高了开发效率和应用性能。
        随着技术进步,B/S 架构不断演进,单页应用(SPA)的流行使得用户体验更加流畅。同时,前后端分离的开发模式允许团队独立工作,加速了开发流程。为了优化性能,B/S 架构广泛应用了缓存、负载均衡和 CDN 等技术,而容器化和微服务架构的兴起,如 Docker 和 Kubernetes,进一步推动了应用的高效部署和管理。

四、系统测试

1.系统测试概述

        系统测试通常按照功能模块来组织,包括用户界面测试、管理员界面测试以及用户功能测试等关键环节。这些测试针对不同的用户群体或角色,目的是验证系统内各个功能模块的运行情况,并确保它们能够满足用户的期望和需求。
        用户界面测试包括新用户注册、登录、参与考试、观看视频、发表评论、浏览错题集等操作。管理员界面测试则关注于系统管理功能,如视频内容管理、用户账户管理、发布公告等任务。通过细致地测试不同的功能模块,可以从多个角度评估系统的表现,这包括功能性、特性、稳定性以及用户交互体验等方面。识别并解决潜在的问题,有助于确保系统的质量和可靠性。

2.系统功能测试

(1)用户端功能测试

表4-1 用户测试表
编号测试功能测试用例预测结果测试结果是否通过
1注册输入用户名1的用户信息注册成功注册成功
2登录输入用户名1的账号密码登录成功登录成功
3在线考试点击开始考试添加答案提交成功提交成功提交
4视频信息点击视频标题1开始播放成功播放成功播放
5论坛点击论坛标题1并且评论评论成功评论成功
6错题本点击我的错题本查看成功查看成功

(2)管理端功能测试

表4-2管理员测试表
编号测试功能测试用例预测结果测试结果是否通过
1登录输入管理员账号密码登录成功登录成功
2查询用户搜索用户名1成功搜索成功搜索
3新增公告点击新增论坛填写标题和内容并提交添加成功添加成功
4修改视频1的备课详情点击视频1的信息页面修改内容点击提交修改成功修改成功
5删除试题点开试题管理和点击试题1的删除按钮并确定删除成功删除成功

3.系统测试结论

        本系统主要采用黑盒测试方法,通过模拟用户操作来构建测试用例,并对系统的各项功能进行验证。这种测试方法旨在确保系统流程的准确性和完整性。系统测试是提升系统质量的关键环节,它有助于提高系统的可用性和用户满意度。
        进行系统测试的目的是为了检验系统的功能模块是否达到了设计初衷,以及这些模块的逻辑是否准确无误。本系统追求简洁易用,避免复杂的逻辑处理,以便用户能够轻松操作。测试的焦点始终是用户体验,确保所有测试场景都紧密贴合用户的实际需求,不偏离既定目标。在遇到问题时,测试团队需从用户的角度出发,深入思考解决方案。通过这一系列的测试流程,我们能够获得最终的测试结果,这些结果将展示系统在功能和性能上是否达到了预期的设计标准。

五、项目代码参考

@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
   UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
   if(user==null || !user.getPassword().equals(password)) {
      return R.error("账号或密码不正确");
   }
   String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
   return R.ok().put("token", token);
}

	@Override
	public String generateToken(Long userid,String username, String tableName, String role) {
		TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
		String token = CommonUtil.getRandomString(32);
		Calendar cal = Calendar.getInstance();   
    	cal.setTime(new Date());   
    	cal.add(Calendar.HOUR_OF_DAY, 1);
		if(tokenEntity!=null) {
			tokenEntity.setToken(token);
			tokenEntity.setExpiratedtime(cal.getTime());
			this.updateById(tokenEntity);
		} else {
			this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
		}
		return token;
	}



/**
 * 权限(Token)验证
 */
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		//支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
	// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
	if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
        	response.setStatus(HttpStatus.OK.value());
            return false;
        }
        
        IgnoreAuth annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
        } else {
            return true;
        }

        //从header中获取token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        
        /**
         * 不需要验证权限的方法直接放过
         */
        if(annotation!=null) {
        	return true;
        }
        
        TokenEntity tokenEntity = null;
        if(StringUtils.isNotBlank(token)) {
        	tokenEntity = tokenService.getTokenEntity(token);
        }
        
        if(tokenEntity != null) {
        	request.getSession().setAttribute("userId", tokenEntity.getUserid());
        	request.getSession().setAttribute("role", tokenEntity.getRole());
        	request.getSession().setAttribute("tableName", tokenEntity.getTablename());
        	request.getSession().setAttribute("username", tokenEntity.getUsername());
        	return true;
        }
        
		PrintWriter writer = null;
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json; charset=utf-8");
		try {
		    writer = response.getWriter();
		    writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
		} finally {
		    if(writer != null){
		        writer.close();
		    }
		}
//				throw new EIException("请先登录", 401);
		return false;
    }
}

六、数据库代码参考

-- MySQL dump 10.13  Distrib 5.7.31, for Linux (x86_64)
--
-- Host: localhost    Database: springbootm3ord
-- ------------------------------------------------------
-- Server version	5.7.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `springbootm3ord`
--

/*!40000 DROP DATABASE IF EXISTS `springbootm3ord`*/;

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `springbootm3ord` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `springbootm3ord`;

--
-- Table structure for table `aboutus`
--

DROP TABLE IF EXISTS `aboutus`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `aboutus` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `title` varchar(200) NOT NULL COMMENT '标题',
  `subtitle` varchar(200) DEFAULT NULL COMMENT '副标题',
  `content` longtext NOT NULL COMMENT '内容',
  `picture1` longtext COMMENT '图片1',
  `picture2` longtext COMMENT '图片2',
  `picture3` longtext COMMENT '图片3',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='关于我们';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `aboutus`
--

LOCK TABLES `aboutus` WRITE;
/*!40000 ALTER TABLE `aboutus` DISABLE KEYS */;
INSERT INTO `aboutus` VALUES (1,'2023-03-05 09:51:25','关于我们','ABOUT US','不管你想要怎样的生活,你都要去努力争取,不多尝试一些事情怎么知道自己适合什么、不适合什么呢?\n你说你喜欢读书,让我给你列书单,你还问我哪里有那么多时间看书;你说自己梦想的职业是广告文案,问我如何成为一个文案,应该具备哪些素质;你说你计划晨跑,但总是因为学习、工作辛苦或者身体不舒服第二天起不了床;你说你一直梦想一个人去长途旅行,但是没钱,父母觉得危险。其实,我已经厌倦了你这样说说而已的把戏,我觉得就算我告诉你如何去做,你也不会照做,因为你根本什么都不做。','upload/aboutus_picture1.jpg','upload/aboutus_picture2.jpg','upload/aboutus_picture3.jpg');
/*!40000 ALTER TABLE `aboutus` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) NOT NULL COMMENT '配置参数名称',
  `value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `config`
--

LOCK TABLES `config` WRITE;
/*!40000 ALTER TABLE `config` DISABLE KEYS */;
INSERT INTO `config` VALUES (1,'picture1','upload/picture1.jpg'),(2,'picture2','upload/picture2.jpg'),(3,'picture3','upload/picture3.jpg');
/*!40000 ALTER TABLE `config` ENABLE KEYS */;
UNLOCK TABLES;

七、项目论文示例

image-20240903223036448

结语

撰写不易
请大家多多点赞、收藏、关注、评论👏
文章下方名片联系我即可~
多多关注,谢谢啦!
👇🏻 精选专栏,推荐订阅👇🏻
计算机毕业设计最强指南✅
计算机最全毕设项目推荐✅

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

excel单元格增加可选下拉列表

excel单元格增加可选下拉列表 下拉设置&#xff1a;数据–数据验证-选择序列-填写来源&#xff08;来源数据用英文逗号分隔&#xff09;&#xff08;是,否&#xff09;- 区域应用&#xff1a;选定区域-数据验证-是-确认

【代码随想录训练营第42期 Day61打卡 - 图论Part11 - Floyd 算法与A * 算法

目录 一、Floyd算法与A * 算法 1、Floyd算法 思想 伪代码 2、 A * 算法 思想 伪代码 二、经典题目 题目一&#xff1a;卡码网 97. 小明逛公园 题目链接 题解&#xff1a;Floyd 算法 题目二&#xff1a;卡码网 127. 骑士的攻击 题目链接 题解&#xff1a;A * 算法&a…

Windows系统修改Tomcat虚拟机内存参数

文章目录 I 修改Tomcat虚拟机内存参数基于tomcat管理程序进行配置基于setenv文件进行配置II 查看服务器状态/manager/status 查看服务器状态manager/jmxproxy 查询Tomcat指标I 修改Tomcat虚拟机内存参数 基于tomcat管理程序进行配置 查看堆内存分配情况: jmap -heap pid jst…

列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()

列表类型 一.Collections.sort() Collections.sort()用于List类型的排序&#xff0c;其提供了两个重载方法&#xff1a; 1.sort(List<T> list) &#xff08;1&#xff09;List指定泛型时只能指定引用数据类型&#xff0c;也就是说无法用于基本数据类型的排序。 &am…

wsksvg - 优化升级,支持多进程处理文件和 SVG 图像转化

前言 在不断发展的前端技术中&#xff0c;图像的优化和处理始终是提升应用性能的关键。wsksvg 插件的最新版本在之前的基础上进行了重大升级&#xff0c;现支持多进程处理文件以及将 SVG 图像转化为多种其他格式的图片。这一功能的引入不仅提升了处理效率&#xff0c;还大幅度…

MySQL之内置函数

目录 一、日期函数 二、字符串函数 三、数学函数 四、其它函数 一、日期函数 常见的日期函数如下&#xff1a; 函数名称说明current_date()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳date_add(date, interval d_value_type)在date中添加日…

Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像

1.定义参数&#xff1a; 使用 booleanParam 定义一个布尔参数&#xff0c;示例如下 booleanParam(name: BUILD_DOCKER, description: 是否构建Docker镜像, defaultValue: false)2.使用参数&#xff1a; 在 stage 中&#xff0c;根据参数的值决定构建方式&#xff1a; stage(编…

如何把用过的试卷恢复?5个软件帮助你快速进行试卷清除

如何把用过的试卷恢复&#xff1f;5个软件帮助你快速进行试卷清除 要恢复或清除用过的试卷上的答案或标记&#xff0c;通常涉及去除笔记、擦除手写痕迹或处理扫描件中的内容。以下五款软件可以帮助你有效地清除试卷上的文字、答案或标记&#xff0c;并将其恢复到空白状态&…

云原生|浅谈云原生中的对象存储之MinIO 的使用

一、什么是对象储存 对象存储&#xff08;Object Storage&#xff09;以对象的形式存储和管理数据&#xff0c;这些对象可以是任何类型的数据&#xff0c;例如 PDF&#xff0c;视频&#xff0c;音频&#xff0c;文本或其他文件类型。对象存储使用分布式存储架构&#xff0c;数据…

大型语言模型:通过代码生成、调试和 CI/CD 集成改变软件开发的游戏规则

文章目录 1. 引言2. 代码生成2.1 提高开发人员的生产力2.2 训练与适应 3. 使用人工智能进行调试和修复错误3.1 提高准确性的创新工具3.2 定制解决方案 4. 无缝 CI/CD 集成4.1 CI/CD 集成人工智能&#xff1a;可靠部署的催化剂4.2 持续学习和改进4.3 缩小开发和运营之间的差距 5…

媒界:2025河南台球及配套设施展会3月举办

立足中原&#xff0c;辐射全国&#xff0c;壹肆柒中国国际台球产业博览会3月在郑州盛大举办&#xff1b; 2025中国&#xff08;郑州&#xff09;国际台球产业博览会&#xff08;壹肆柒台球展&#xff09; The 2025 China (Zhengzhou) International Billiards Industry Expo …

数据库中间件Mycat

Mycat是基于Java编写的实现了MySQL协议的数据库中间件&#xff0c;可以将它看成一个数据库代理&#xff0c;可以直接用MySQL客户端工具访问。其核心功能是分库分表和读写分离。 MyCat 是基于阿里开源的 Cobar 产品而研发&#xff0c;Cobar 的稳定性、可靠性、优秀的架构和性能…

【JAVA开源】基于Vue和SpringBoot的学科竞赛管理系统

本文项目编号 T 047 &#xff0c;文末自助获取源码 \color{red}{T047&#xff0c;文末自助获取源码} T047&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

【Java 集合】List接口 —— ArrayList 与 LinkedList 详解

List接口继承自Collection接口&#xff0c;是单列集合的一个重要分支。 在List集合中允许出现重复的元素&#xff0c;所有的元素是以一种线性方式进行存储的&#xff0c;在程序中可以通过索引&#xff08;类似于数组中的元素角标&#xff09;来访问集合中的指定元素。另外&…

CSS清除浮动的多种方法

目录 非 VIP 用户可前往公众号回复“css”进行免费阅读 给浮动元素的祖先元素加高度 给 div 写一个 clear:both; 属性(margin 失效) clear:both; 隔墙法 clear:both; 内墙法 父级 div 定义伪类:after 和 zoom(推荐使用) overflow:hidden;(能够让 margin 生效) 非 …

九、成功版--windows上安装artifactory配置postgressql

centos上搞不定&#xff0c;windows上搞定了 现阶段是想用java写程序控制制品库&#xff0c;等以后研究多了需要写一些脚本的时候&#xff0c;在研究linux上安装artifactory&#xff08;公司就用的linux安装的配置mysql&#xff0c;有空对着配一下linux的&#xff09; 源码地…

文献管理不再难:20个Zotero插件帮你搞定

以下插件排序按照星标量进行排序&#xff0c;常用的插件大概是前20的样子&#xff0c;可以根据自己的需求进行插件的安装。 顺带提一句&#xff0c;插件不是越多越好&#xff0c;装多了可能会出现软件卡顿的情况。 1、Scholaread for Zotero 插件下载&#xff1a;插件下载 …

【智能大数据分析 | 实验一】MapReduce实验:单词计数

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

阿里云云效多个ssh密钥对配置

实现功能 windows本地多个ssh密钥对,分别对应不同的阿里云账号的云效 实现办法 1.生成ssh密钥对 ssh-keygen -t rsa -f C:\xxx\id_rsa_customname(我这里C:\Users\admin\.ssh\id_rsa_customname) 2.配置.ssh目录的config文件 # ruiyi Host customnameHostName codeup.al…

java通过org.eclipse.milo实现OPCUA客户端进行连接和订阅

前言 之前写过一篇关于MQTT的方式进行物理访问的文章&#xff1a;SpringBoot集成MQTT&#xff0c;WebSocket返回前端信息_springboot mqtt websocket-CSDN博客 最近又接触到OPCUA协议&#xff0c;想通过java试试看能不能实现。 软件 在使用java实现之前&#xff0c;想着有没…