自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 06 Activiti 与 Spring Boot 整合

本文基于 Activiti 7.0.0.GA 版本的源码,研究 Activiti 是如何整合到 Spring Boot 中的。依据 Spring Boot 自动配置原理和自定义实现 Spring Boot Starter 等网络文章,快速找到 Activiti 的 starter 模块的 META-INF\spring.factories 文件,研究整合细节。

2025-11-09 16:28:32 965 1

原创 JWT多版本实现之间的区别

在 Java 的 JWT 库中,nimbus-jose-jwt、com.auth0:java-jwt 和 io.jsonwebtoken:jjwt 都是常见的选择。:部分关于 com.auth0 库的对比信息来源于2019年左右的评测,库的特性可能已经更新。nimbus-jose-jwt 和 com.auth0 的 Java JWT 库都是非常优秀的工具,它们各有侧重。如果你能分享一下你项目的具体场景或主要关注点,或许我能给出更精准的建议。功能全面,支持加密(JWE),社区活跃,适合复杂场景。

2025-10-27 16:34:13 344

原创 05 初始化

在前面几个章节的内容中,在做所有操作前,我们要获取一个 ProcessEngine 实例,就必须先调用 ProcessEngines.getDefaultProcessEngine() 初始化一个 ProcessEngine。通过这个 ProcessEngine 提供的各个 Service 的 API,我们才顺利部署流程模型、启动流程实例、完成审批任务等。那Activiti框架是怎么初始化的?

2025-09-24 22:40:10 932

原创 04 完成审批任务

用户完成审批任务这一操作,从 Activiti 框架角度来讲,就是调用了一次的complete方法,在这个方法内部的主要业务逻辑如下:1. 通过taskId从数据库加载TaskEntity;2. 给TaskEntity绑定变量(前提是有变量传入);3. 记录身份链接类型,把身份链接类型存储入库,审批完成;4. 删除数据库中记录的TaskEntity;5. 继续前往下一个节点(如果有才往下一个节点走)。

2025-09-15 15:51:24 992

原创 03 节点行为

UserTask节点上的行为,主要工作是解析bpmn20.xml流程文件上定义的UserTask节点变量信息,得到变量信息后,从上匹配变量的值,把匹配到的值设置到TaskEntity中。将TaskEntity存储入库,得益于未设置(跳过表达式),使得流程从StartEvent开始后流转到了UserTask节点,并在UserTask节点上暂时停了下来等待,直到用户完成审批,流程才会继续往下走。

2025-09-14 20:36:27 302

原创 02 流程流转

本章节内容有点绕也有点复杂,下面画个简图辅助理解。图中的是接口的实现类,所以本身就是的一个实例,这个实例叫流程实例。一个流程实例至少有一个或多个实例,流程实例本身称之为,而流程实例下的一个或多个称之为, 它们之间属于父子关系。像本章开头的审批流程图,因没有并行分支,所以只会产生一个。启动流程实例:创建的实例,并将此实例的指向StartEvent。流转到此时将指向。流转到UserTask此时将指向UserTask。以此类推,当流转到EndEvent时,将指向。

2025-08-13 23:26:05 883

原创 ApiPost 设置统一URL前缀

我们将默认环境切换为刚刚设置的 Activiti 7,此时位置2出现了服务器的IP地址,加上接口,形成了一个完整的 URL。点击 发送,服务正常响应,配置成功。默认环境下(位置1),并没有设置 前缀URL,所以位置2没有服务器的IP地址,只有接口名。打开 ApiPost,找到右上角这个选项。填写环境名称和 前置URL,保存并关闭。点击一下,弹出候选列表,选择新建环境。版本:ApiPost 8.2.0。

2025-08-08 10:52:35 441

原创 Activiti 中各种 startProcessInstance 接口之间的区别

本文梳理了Activiti 7.0.0中RuntimeService的20个流程启动接口,按启动类型(流程定义Key/ID/消息)、变量传递、业务键、租户等维度进行分类。重点解析了processDefinitionKey(模型定义的Key)与processDefinitionId(部署后生成的版本ID)的区别:Key启动最新版本,ID可指定特定版本。通过订单审批和请假申请两个示例,说明了businessKey在关联业务数据与流程实例中的实际应用价值,包括快速查询流程状态、定位业务数据等场景。

2025-08-07 17:16:21 838

原创 Java线程池拒绝策略

本文介绍了Java线程池的拒绝策略机制。Java提供了四种内置拒绝策略:AbortPolicy(抛出异常)、CallerRunsPolicy(调用者执行)、DiscardPolicy(直接丢弃)和DiscardOldestPolicy(丢弃最旧任务)。默认策略是AbortPolicy。文章还展示了如何自定义拒绝策略(如RequeuePolicy将任务重新入队),并通过示例验证了自定义策略的有效性。

2025-07-18 07:29:03 812

原创 01 启动流程实例

本文分析Activiti框架启动流程实例核心机制,以含审批节点的流程图为例,剖析startProcessInstanceById方法实现,解析流程实例创建逻辑,指出关键调用,总结核心组件协作关系,强调拦截器机制设计优势。

2025-07-16 23:32:11 836

原创 仓颉中的函数类型

摘要:本文介绍了仓颉编程语言中函数作为一等公民的特性,重点讲解了函数类型的定义和使用方式。函数类型由参数类型和返回类型组成,用"->"连接,可包含参数名。函数类型可作为参数类型、返回类型或变量类型使用。文章通过多个示例展示了函数类型的具体语法和应用场景,包括函数重载时的类型歧义处理,并与Java语言进行了简要对比。笔记部分强调了类型参数名的概念及其使用规范。

2025-07-11 17:16:56 818

原创 MCP Server 初学习

本文记录了基于MCP协议开发本地文件管理智能体的全过程。作者使用SpringBoot3.x和JDK17搭建环境,通过定义FileService接口及实现类完成文件查询功能,并用@Tool注解标识工具能力。项目打包后,在TraeIDE中配置MCP服务并集成到智能体,成功实现AI调用listFile工具列出指定目录文件。整个开发流程顺畅,使作者对MCP协议的工作原理有了具象认知,为后续开发更复杂智能体奠定了基础。参考B站教程"15分钟Java快速构建MCPServer"完成实践。

2025-06-23 23:14:25 1036

原创 Activiti:StartEvent(开始节点)如何走到下一个节点

Activiti流程引擎中节点流转机制的核心逻辑分析。本文聚焦TakeOutgoingSequenceFlowsOperation类的实现细节,揭示了流程实例从StartEvent节点流转到下一节点的处理过程。关键点包括:1)通过getOutgoingFlows()获取当前节点的所有外出顺序流;2)使用ConditionUtil评估条件表达式筛选有效流转路径;3)当存在多条有效路径时创建子ExecutionEntity实例实现流程分支;4)通过Agenda调度机制计划后续执行操作。流程节点的流转本质是通过管

2025-06-08 22:26:18 845

原创 Tomcat启动报java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()异常

借助jdk提供的javap反编译命令和maven提供的依赖树分析命令,快速定位到了问题点。

2024-08-07 13:21:19 1531

原创 mysql数据库备份出0kb文件问题

我们的服务中,有一个数据库定时备份功能,这个功能基于quartz调度框架来定时执行bat脚本,脚本中通过执行mysqldump命令来实现mysql数据库备份。这样一个mysql数据库备份功能,在部分客户的生产环境中稳定复现备份出的文件大小为0kb问题。备注:服务部署在Windows Server中。

2024-07-18 23:50:13 983

原创 Docker容器网络端口映射配置问题

在CentOS上的Docker中,启动了一个mysql服务,该服务的端口3306配置映射到宿主机上的3306,宿主机上的防火墙firewalld也已经开放3306的端口给外部访问。在开启防火墙的情况下,实际在外部一直都访问不了3306端口,但关闭防火墙,在外部是能访问3306端口的。是哪一步配置错误了,还是配置没有配完?

2024-06-01 11:31:59 1340

原创 javax.annotation.Resource和jakarta.annotation.Resource的区别

两个@Resource注解有什么区别?

2024-05-26 11:52:10 3571

原创 Spring 6.0.19源码环境搭建

为了学习Spring框架源码,搭建一套Spring源码环境。基础环境JDK:17.0.8。

2024-05-07 00:57:30 1308

原创 Java之switch case长语句优化

优化之后的代码,完全去掉了长长的switch case模块代码,只需要从map中根据key取一个对应的值或者函数式接口就可以了。这样的方式大大提高了代码的整洁度、降低了代码维护的难度,遵循了“对扩展开放,对修改关闭”的原则。去掉了switch case模块并不是觉得switch case不好,在case条件少的情况下比if else条件语句强的,但当case条件超过20、30个以上的时候就显得特别的臃肿了,作为一个程序员,怎能看到如此臃肿的代码而置之不理?

2024-04-30 13:00:43 4124 1

原创 tcpdump抓包docker容器之间网络内容

客户生产环境的客户端上传小文件是可以正常上传的,但在上传大文件到服务器时经常发生卡慢和超时问题,导致无法上传大文件。为了分析这个问题,我和同事捋了一下服务端架构,架构如下:Docker内部有容器A和容器B两个服务,容器B的端口12000映射到了宿主机上的端口12000,外部客户端可以正常访问。服务A的端口没有做映射,只允许Docker内部的容器互相访问。

2024-04-20 12:55:23 3581 1

原创 JProfile排查Quartz定时任务异常停止问题

JProfile版本:11.1.4项目中有一个数据库定时备份任务,备份了几天之后,发现停止备份了,查系统运行日志未发现异常。重启操作系统后又可以备份了,但同样也是备份几天后停止。怀疑是quartz线程池的线程不够用,于是增加了线程数量,但治标不治本,定时任务最后还是停止的。前期使用JDK提供的jvisualvm观察线程状未发现异常,后期改成JProfile。

2024-04-10 13:00:52 2032

原创 Windows操作系统重启后自动挂载NAS服务配置

基于CentOS搭建的NFS服务端,基于Windwos搭建的NFS客户端,客户端该如何配置才能在重启客户端操作系统后自动挂载NFS共享磁盘?

2024-04-09 11:57:27 4110

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除