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

SpringBoot整合Activiti7——消息事件(十)

文章目录

  • 消息事件
    • 开始事件
    • 中间事件
    • 边界事件
    • 代码实现
      • xml文件
      • 测试流程
      • 流程执行步骤


消息事件

消息事件只有一个接收者,消息具有名字与载荷。

信息会储存在 act_ru_event_subscr 表中。

<!-- 定义消息 -->
<message id="msgId1" name="msgName1"/>
<message id="msgId2" name="msgName2"/>
<message id="msgId3" name="msgName3"/>
<message id="msgId4" name="msgName4"/>

开始事件

使用场景:比如接收到一封邮件,一条短信后启动流程

<!-- 消息开始事件 -->
<startEvent id="sid-2aac151d-e888-467a-b8e9-2f512e365228" name="消息开始事件"><!-- 引用消息 --><messageEventDefinition messageRef="msgId1"/>
</startEvent>

中间事件

使用场景:需要接收特定的消息之后才能进入下一个环节

<!-- 消息中间事件 -->
<intermediateCatchEvent id="sid-b3ed607b-e3ea-4695-87af-54c71bd85820" name="消息中间事件"><messageEventDefinition messageRef="msgId2"/>
</intermediateCatchEvent>

边界事件

使用场景:当前用户任务还没有完成,触发了边界事件(发送消息),会根据cancelActivity属性完成下一个节点。

<!-- 消息边界事件1 -->
<boundaryEvent id="sid-32b97e42-5b52-45fa-9bc3-ec8bd4461087" attachedToRef="sid-c504e710-651a-4f5a-a0a1-6e2e3d3e992a" cancelActivity="false" name="消息边界事件1"><messageEventDefinition messageRef="msgId3"/>
</boundaryEvent>

代码实现

消息开始事件 - 自动任务 - 消息中间事件 - 用户任务(消息边界事件非中断) - 用户任务(消息边界事件中断)- 结束流程
在这里插入图片描述

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><!-- 定义消息 --><message id="msgId1" name="msgName1"/><message id="msgId2" name="msgName2"/><message id="msgId3" name="msgName3"/><message id="msgId4" name="msgName4"/><process id="message" name="消息事件" isExecutable="true"><documentation>消息事件流程</documentation><!-- 消息开始事件 --><startEvent id="sid-2aac151d-e888-467a-b8e9-2f512e365228" name="消息开始事件"><!-- 引用消息 --><messageEventDefinition messageRef="msgId1"/></startEvent><!-- 服务任务 --><serviceTask id="sid-bdcd3e82-e9d3-41ee-ae69-f658ea3cf1d1" activiti:exclusive="true" name="服务任务" activiti:delegateExpression="${myServiceTaskListener}"/><sequenceFlow id="sid-1bcd8e94-8f7b-4265-a3b7-b2e113bb3d09" sourceRef="sid-2aac151d-e888-467a-b8e9-2f512e365228" targetRef="sid-bdcd3e82-e9d3-41ee-ae69-f658ea3cf1d1"/><!-- 结束事件1 --><endEvent id="sid-9376d8dd-c6fd-4c8c-94b0-549ca543194c" name="结束事件1"/><sequenceFlow id="sid-9360e3fe-a092-46f4-a6d0-b68cc66f7b57" sourceRef="sid-bdcd3e82-e9d3-41ee-ae69-f658ea3cf1d1" targetRef="sid-b3ed607b-e3ea-4695-87af-54c71bd85820"/><!-- 消息中间事件 --><intermediateCatchEvent id="sid-b3ed607b-e3ea-4695-87af-54c71bd85820" name="消息中间事件"><!-- 引用消息 --><messageEventDefinition messageRef="msgId2"/></intermediateCatchEvent><!-- 用户任务1 --><userTask id="sid-c504e710-651a-4f5a-a0a1-6e2e3d3e992a" name="用户任务1"><extensionElements><activiti:taskListener event="create" delegateExpression="${myUserTaskListener}"/></extensionElements></userTask><sequenceFlow id="sid-fc3da049-2f76-4188-8c33-27a7572c263e" sourceRef="sid-b3ed607b-e3ea-4695-87af-54c71bd85820" targetRef="sid-c504e710-651a-4f5a-a0a1-6e2e3d3e992a"/><sequenceFlow id="sid-d164986f-7551-43b3-b18e-da7b2830dc7f" sourceRef="sid-c504e710-651a-4f5a-a0a1-6e2e3d3e992a" targetRef="sid-1dbfc3d6-a8ae-4989-9dab-343a2ab573f5"/><!-- 消息边界事件1 --><boundaryEvent id="sid-32b97e42-5b52-45fa-9bc3-ec8bd4461087" attachedToRef="sid-c504e710-651a-4f5a-a0a1-6e2e3d3e992a" cancelActivity="false" name="消息边界事件1"><messageEventDefinition messageRef="msgId3"/></boundaryEvent><!-- 服务任务 通知服务 --><serviceTask id="sid-813f9e98-aa9a-4744-b4ff-503f31cd5af8" activiti:exclusive="true" name="通知服务" activiti:delegateExpression="${myServiceTaskListener}"/><sequenceFlow id="sid-a05f2ac4-4cbb-4091-b32a-2251e3d59c34" sourceRef="sid-32b97e42-5b52-45fa-9bc3-ec8bd4461087" targetRef="sid-813f9e98-aa9a-4744-b4ff-503f31cd5af8"/><!-- 用户任务2 --><userTask id="sid-1dbfc3d6-a8ae-4989-9dab-343a2ab573f5" name="用户任务2"><extensionElements><activiti:taskListener event="create" delegateExpression="${myUserTaskListener}"/></extensionElements></userTask><!-- 消息边界事件2 --><boundaryEvent id="sid-e9d7d45d-9d06-4b01-8315-e50b66c2dfbd" attachedToRef="sid-1dbfc3d6-a8ae-4989-9dab-343a2ab573f5" cancelActivity="true" name="消息边界事件2"><messageEventDefinition messageRef="msgId4"/></boundaryEvent><!-- 用户任务3 --><userTask id="sid-fb470629-bb4f-4c15-8031-629bf6b23474" name="用户任务3"><extensionElements><activiti:taskListener event="create" delegateExpression="${myUserTaskListener}"/></extensionElements></userTask><!-- 结束事件2 --><endEvent id="sid-59e5b9e6-1579-464f-bebf-939a6925894b" name="结束事件2"/><sequenceFlow id="sid-4796fc97-3d81-44ac-a372-1ec5107ba121" sourceRef="sid-813f9e98-aa9a-4744-b4ff-503f31cd5af8" targetRef="sid-9376d8dd-c6fd-4c8c-94b0-549ca543194c"/><sequenceFlow id="sid-7b257b24-9a92-4cca-9280-50f057d3b756" sourceRef="sid-1dbfc3d6-a8ae-4989-9dab-343a2ab573f5" targetRef="sid-59e5b9e6-1579-464f-bebf-939a6925894b"/><sequenceFlow id="sid-81b3aace-e1af-4f69-8a77-a1ed9a659c40" sourceRef="sid-e9d7d45d-9d06-4b01-8315-e50b66c2dfbd" targetRef="sid-fb470629-bb4f-4c15-8031-629bf6b23474"/><sequenceFlow id="sid-b307971c-2cdf-4af0-bebc-a2943945cc8c" sourceRef="sid-fb470629-bb4f-4c15-8031-629bf6b23474" targetRef="sid-59e5b9e6-1579-464f-bebf-939a6925894b"/></process><bpmndi:BPMNDiagram id="BPMNDiagram_message"><bpmndi:BPMNPlane bpmnElement="message" id="BPMNPlane_message"><bpmndi:BPMNShape id="shape-2389bc8b-6dca-4ad0-ae30-7f18f1df4ff4" bpmnElement="sid-2aac151d-e888-467a-b8e9-2f512e365228"><omgdc:Bounds x="-292.75" y="-38.5" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-6933f3c2-9e66-478d-a2bf-22042e7198c2" bpmnElement="sid-bdcd3e82-e9d3-41ee-ae69-f658ea3cf1d1"><omgdc:Bounds x="-234.25" y="-63.5" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-c3bd0815-b0e9-4f3a-a4a8-d531063d5ee1" bpmnElement="sid-1bcd8e94-8f7b-4265-a3b7-b2e113bb3d09"><omgdi:waypoint x="-262.75" y="-23.5"/><omgdi:waypoint x="-234.25" y="-23.5"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-369198b3-92b5-41dc-be13-161bb96aceeb" bpmnElement="sid-59e5b9e6-1579-464f-bebf-939a6925894b"><omgdc:Bounds x="388.9129" y="-38.5" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-ea561676-eb7f-4e24-b93e-55253ef99de6" bpmnElement="sid-9360e3fe-a092-46f4-a6d0-b68cc66f7b57"><omgdi:waypoint x="-134.25" y="-23.5"/><omgdi:waypoint x="-106.75" y="-23.5"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-18ea56ca-4b72-4eb3-bc65-02515550d26d" bpmnElement="sid-b3ed607b-e3ea-4695-87af-54c71bd85820"><omgdc:Bounds x="-106.75" y="-38.5" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-5f517e63-3511-4b12-bb7e-3190a8e458fb" bpmnElement="sid-c504e710-651a-4f5a-a0a1-6e2e3d3e992a"><omgdc:Bounds x="-49.35" y="-63.5" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-a788f528-47cb-4a02-8ac1-18214cbe2277" bpmnElement="sid-fc3da049-2f76-4188-8c33-27a7572c263e"><omgdi:waypoint x="-76.75" y="-23.5"/><omgdi:waypoint x="-49.35" y="-23.5"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-8a99dde1-060b-4fcc-8053-6e9f8ea853f9" bpmnElement="sid-d164986f-7551-43b3-b18e-da7b2830dc7f"><omgdi:waypoint x="50.65" y="-23.5"/><omgdi:waypoint x="184.43443" y="-23.5"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-9a8d9303-59ce-472d-8ba5-92d68589673c" bpmnElement="sid-813f9e98-aa9a-4744-b4ff-503f31cd5af8"><omgdc:Bounds x="36.874165" y="61.529808" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-5e7d2270-7207-4b9c-a151-90b8ae3dbec4" bpmnElement="sid-a05f2ac4-4cbb-4091-b32a-2251e3d59c34"><omgdi:waypoint x="0.7840462" y="10.115295"/><omgdi:waypoint x="0.6500015" y="101.5298"/><omgdi:waypoint x="36.87416" y="101.52981"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-c3ae777e-7677-4666-9568-82afcd8f105c" bpmnElement="sid-1dbfc3d6-a8ae-4989-9dab-343a2ab573f5"><omgdc:Bounds x="184.43442" y="-63.5" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-6c351baf-210d-4254-b775-90d3d849503b" bpmnElement="sid-fb470629-bb4f-4c15-8031-629bf6b23474"><omgdc:Bounds x="276.2087" y="61.529793" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-78f32f48-e45e-4280-8f9e-8da9b1aa8137" bpmnElement="sid-9376d8dd-c6fd-4c8c-94b0-549ca543194c"><omgdc:Bounds x="174.23729" y="86.5298" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-a27dffa7-5cdb-4725-b416-935122444e28" bpmnElement="sid-4796fc97-3d81-44ac-a372-1ec5107ba121"><omgdi:waypoint x="136.87416" y="101.52981"/><omgdi:waypoint x="174.23729" y="101.5298"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-1c9fe7c0-1a25-4713-964b-c21c7e7da939" bpmnElement="sid-7b257b24-9a92-4cca-9280-50f057d3b756"><omgdi:waypoint x="284.43442" y="-23.5"/><omgdi:waypoint x="388.9129" y="-23.5"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-f224127e-7bf1-4c6b-a9cb-71d3779a2095" bpmnElement="sid-81b3aace-e1af-4f69-8a77-a1ed9a659c40"><omgdi:waypoint x="243.56537" y="12.270161"/><omgdi:waypoint x="244.85805" y="101.5298"/><omgdi:waypoint x="276.2087" y="101.529785"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-236d755e-c900-4a3e-ac03-c67efc67fe2c" bpmnElement="sid-b307971c-2cdf-4af0-bebc-a2943945cc8c"><omgdi:waypoint x="376.20874" y="101.529785"/><omgdi:waypoint x="403.91287" y="101.529785"/><omgdi:waypoint x="403.9129" y="-8.5"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-0e367d18-9323-48cf-9862-2050042aaa3a" bpmnElement="sid-32b97e42-5b52-45fa-9bc3-ec8bd4461087"><omgdc:Bounds x="-14.215954" y="-19.884705" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-8741f847-bbde-4157-8d80-729f8858eec8" bpmnElement="sid-e9d7d45d-9d06-4b01-8315-e50b66c2dfbd"><omgdc:Bounds x="228.56535" y="-17.72984" width="30.0" height="30.0"/></bpmndi:BPMNShape></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

测试流程

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestActivityMessage {@Autowiredprivate RepositoryService repositoryService;@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;private static final String PROCESS_INSTANCE_ID = "bb77d92a-3e55-11ee-8497-18c04dcd4aee";@Testpublic void deployAndStartProcess() {// 部署流程Deployment deploy = repositoryService.createDeployment().addClasspathResource("processes/message.bpmn20.xml").deploy();System.out.println("deploy = " + deploy);// 启动流程 根据消息名称触发启动,定义的消息会记录在act_ru_event_subscr,事件结束后自动删除记录。ProcessInstance processInstance = runtimeService.startProcessInstanceByMessage("msgName1", "message:10001");System.out.println("processInstance = " + processInstance);}@Testpublic void receivedMiddleMessage() {// 查询执行Execution execution = runtimeService.createExecutionQuery().processInstanceId(PROCESS_INSTANCE_ID).onlyChildExecutions().singleResult();System.out.println("execution = " + execution);// 发送消息 触发消息中间事件runtimeService.messageEventReceived("msgName2", execution.getId());}@Testpublic void receivedBoundMessage() {String messageName = "msgName4";// 查询执行 根据消息名字查询Execution execution = runtimeService.createExecutionQuery().processInstanceId(PROCESS_INSTANCE_ID).messageEventSubscriptionName(messageName).onlyChildExecutions().singleResult();System.out.println("execution = " + execution);// 发送消息runtimeService.messageEventReceived(messageName, execution.getId());}@Testpublic void completeUserTask() {// 查询任务Task task = taskService.createTaskQuery().processInstanceId(PROCESS_INSTANCE_ID).singleResult();System.out.println("task = " + task);// 完成任务taskService.complete(task.getId());}}

流程执行步骤

// 1.部署流程并根据消息开始事件-名字msgName1启动流程
// 2.触发服务任务
// 3.触发消息中间事件msgName2
// 4.查询execution,并发送msgName2消息
// 5.当前任务为用户任务1,触发消息边界事件1-msgName3(非中断)
// 6.根据消息名字msgName3查询execution,并发送msgName3消息
// 7.触发通知服务任务
// 8.完成用户任务1,当前任务变更为用户任务2,触发消息边界事件2-msgName4(中断)
// 9.根据消息名字msgName4查询execution,并发送msgName4消息
// 10.当前任务变更为用户任务3
// 11.完成用户任务3结束流程

相关文章:

SpringBoot整合Activiti7——消息事件(十)

文章目录 消息事件开始事件中间事件边界事件代码实现xml文件测试流程流程执行步骤 消息事件 消息事件只有一个接收者&#xff0c;消息具有名字与载荷。 信息会储存在 act_ru_event_subscr 表中。 <!-- 定义消息 --> <message id"msgId1" name"msgName…...

高翔:《自动驾驶与机器人中的SLAM技术 》-Slam_in_autonomous_driving 编译过程中遇到的问题

使用的环境是ubuntu20.04 问题1.安装g2o没有问题&#xff0c;不过在编译整个项目工程时候报错&#xff1a; ”openmp_mutex.h: 30:10: fatal error: g2o/config.h: No such file or directory“: 解决办法&#xff1a; 只需要将/thirdparty/g2o/build/g2o下的config.h放到/…...

org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 实现密码加密 验证 代码示例

BCryptPasswordEncoder 是 Spring Security 提供的用于加密和验证密码的实现类。它使用强大的 BCrypt 散列函数来存储密码的散列值&#xff0c;提供了一种安全的密码存储方法。以下是一个简单的示例代码&#xff0c;演示如何使用 BCryptPasswordEncoder 进行密码加密和验证&…...

《微信小程序开发从入门到实战》学习三十八

4.2 云开发JSON数据库 4.2.9 条件查询与查询指令 在查询数据时&#xff0c;有时需要对查找的数据添加一些限定条件&#xff0c;只获取满足给定条件的数据&#xff0c;这样的查询称为条件查询。 可以在集合引用上使用where方法指定查询条件&#xff0c;再用get方法&#xff0…...

云服务器哪家便宜?亚马逊AWS等免费云服务器推荐

在这数字化的时代&#xff0c;云计算技术越来越广泛应用于各种场景&#xff0c;尤其是云服务器&#xff0c;作为一种全新的服务器架构正在逐渐取代传统的物理服务器&#xff0c;“云服务器哪家便宜”等用户相关问题也受到越来越多的关注。自从亚马逊最早推出了首个云计算服务—…...

Linux删除了大文件为什么磁盘空间没有释放?

某天&#xff0c;收到监控系统的告警信息&#xff0c;说磁盘空间占用过高&#xff0c;登上服务器&#xff0c;使用 df -h 一看&#xff0c;发现磁盘占用率已经 96%了&#xff1a; 通过查看 /usr/local/nginx/conf/vhost/xxx.conf 找到 access_log 和 error_log 的路径&#x…...

编写bat脚本执行msyql建库sql

使用cmd命令执行(windows下) 【MySQL的bin目录】\mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】&#xff0c;示例&#xff1a; D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql 注意&#xff1a; A、如果在sql脚本文件中使用了use 数据库&…...

【JavaSE学习专栏】第04篇 Java面向对象

文章目录 1 面向过程&面向对象2 类和对象2.1 对象的特征2.2 java类及类的成员2.3 类的语法格式 3 创建与初始化对象3.1 类的成员之一&#xff1a;属性3.2 类的成员之二&#xff1a;方法3.3 类的成员之三&#xff1a;构造器&#xff08;构造方法&#xff09;3.3.1 无参构造方…...

sCrypt 在英国伦敦 Exeter 大学讲学

6月5日&#xff0c;sCrypt CEO晓晖和他的两位同事在英国伦敦Exeter大学举行了一场精彩的讲座。刘晓晖向听众们详细介绍了sCrypt智能合约开平台&#xff0c;并演示了如何使用sCrypt来开发基于比特币的智能合约。他用生动形象的语言&#xff0c;深入浅出地解释了这个领域复杂而又…...

人工智能基础创新的第二增长曲线

编者按&#xff1a;2023年是微软亚洲研究院建院25周年。借此机会&#xff0c;我们特别策划了“智启未来”系列文章&#xff0c;邀请到微软亚洲研究院不同研究领域的领军人物&#xff0c;以署名文章的形式分享他们对人工智能、计算机及其交叉学科领域的观点洞察及前沿展望。希望…...

华为OD机试真题-分割均衡字符串-2023年OD统一考试(C卷)

题目描述&#xff1a; 均衡串定义&#xff1a;字符串只包含两种字符&#xff0c;且两种字符的个数相同。 给定一个均衡字符串&#xff0c;请给出可分割成新的均衡子串的最大个数。 约定字符串中只包含大写的X和Y两种字符。 输入描述&#xff1a; 均衡串&#xff1a;XXYYXY 字符…...

基于SpringBoot的图书推荐系统的

摘 要 网络信息技术的高速发展&#xff0c;使得高校图书馆的服务空间日益扩大&#xff0c;依据个人特点的针对性服务逐渐成为新服务模式的主导趋势。对于大多数用户而言&#xff0c;很难在大量的学术图书馆中快速找到他们想要的材料。另外&#xff0c;随着时代的不断发展&…...

02_学习使用javax_ws_rs_下载文件

文章目录 1 前言2 Maven 依赖3 下载接口4 如何返回文件&#xff1f;5 感谢 1 前言 专栏上一篇&#xff0c;写了如何使用 javax.ws.rs 上传文件&#xff0c;那么必然的&#xff0c;我们得再学习学习如何下载文件&#x1f600; 2 Maven 依赖 这个就不赘述了&#xff0c;和上一篇…...

js校验多个时间段的时间是否有交叉

参考博客&#xff1a; Java日期时间API系列37-----时间段是否有重叠&#xff08;交集&#xff09;的计算方法 Java 最优雅方式校验时间段重叠 判断是否有交叉数据 let timePeriod [{start: dateList[0].value, //时间段1的开始时间 时间格式为1130&#xff08;代表11&#xf…...

Python Spyder开发的应用项目

Python是一种功能强大且受欢迎的编程语言&#xff0c;被广泛应用于科学计算、数据分析和机器学习等领域。而Spyder则是一款专为科学计算和数据分析而设计的Python集成开发环境&#xff08;IDE&#xff09;。本文将介绍Spyder的特点、功能以及如何使用。 特点 Spyder具有以下主…...

ES6知识点

ES6 知识点及常考面试题 var、let 及 const 区别 涉及面试题&#xff1a;什么是提升&#xff1f;什么是暂时性死区&#xff1f;var、let 及 const 区别&#xff1f;对于这个问题&#xff0c;我们应该先来了解提升&#xff08;hoisting&#xff09;这个概念。 console.log(a)…...

数据结构详解各种算法

1、设有两个整型顺序表L1&#xff0c;L2&#xff0c;其元素值递增有序存放&#xff0c;请定义该顺序表的元素类型及表类型,设计以下自定义函数&#xff1a; &#xff08;1&#xff09;录入顺序表中所有元素的值。 &#xff08;2&#xff09;将顺序表L1&#xff0c;L2合并为到…...

Qt实现右键菜单

一、实现方法 QWidget提供了虚函数: virtual void contextMenuEvent(QContextMenuEvent*event);覆写该函数&#xff0c;即可。 二、Example 创建一个基本的mainwindow项目&#xff0c; 头文件&#xff1a; class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWin…...

MySQL基础篇一

基础篇 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09; DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改 DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录 DCL: 数据控制语言&#xff…...

深入了解Java8新特性-日期时间API:OffsetDateTime类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概24000多字&#xff0c;预计阅读时间长需要20分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

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&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...