自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java每日精进 7.28【流程设计6.0(泳池和泳道)】

在 BPMN(业务流程建模与标记法)中,泳池(Pool)和泳道(Lane)是用于组织和展示流程中不同参与者或角色的图形化工具。它们的主要作用是清晰地划分职责和功能,帮助理解复杂流程中每个步骤的负责人。泳池(Pool):代表流程中的一个主要参与者或实体,例如一个部门、组织或角色。泳池通常作为一个图形容器,将不同参与者之间的活动分开。通常一个流程图中可以有一个或多个泳池。如果流程涉及多个独立实体(如公司内部和外部的交互),会使用多个泳池;如果只涉及单一组织内部的流程,通常只有一个泳池。泳道(Lane)

2025-07-28 18:30:00 831

原创 java每日精进 7.26【流程设计5.0(中间事件+结束事件)】

消息捕获事件与抛出事件通过messageRef关联,必须引用同一个消息 ID流程会在消息捕获事件处暂停,直到收到对应的消息才继续消息是点对点的,通常用于两个特定流程之间的通信适用于需要异步等待外部系统响应的场景(如支付、审批等)空结束事件:最简单的结束事件,用于流程或分支的正常结束,无需抛出结果。错误结束事件:用于子流程抛出错误,触发父流程的错误边界事件,适合异常处理。取消结束事件:专用于事务子流程,触发取消边界事件和补偿机制,适合事务回滚。终止结束事件。

2025-07-26 18:30:00 902

原创 java每日精进 7.25【流程设计3.0(网关+边界事件)】

排他网关(也叫XOR网关)是最常用的网关,作用是做选择题:从多条路中只能选一条走。它需要搭配条件来判断走哪条路,条件写在流出顺序流(sequenceFlow)上。工作原理流程到达排他网关时,会按顺序检查每条流出顺序流的条件。找到第一个条件为true的顺序流,就走这条路,其他路被忽略。如果所有条件都为false,但定义了默认顺序流,就走默认路。如果没有默认路且所有条件都为false,流程会抛出异常(流程中断)。建议每条顺序流都设置条件,没条件的顺序流默认算true。排他网关不负责合并。

2025-07-25 18:30:00 881

原创 java每日精进 7.23【流程设计2.0(顺序流)】

顺序流是 BPMN2 规范中的流程定义元素,是连接两个流程节点的连线。顺序流可以在编排流 程时控制流程的执行顺序,流程执行完一个节点后,会沿着节点的所有外出顺序流继续执行。顺序 流在 BPMN 2.0 中默认的行为是并发的:多个外出顺序流会创造多个单独的,并发流程分支。顾名思义,条件顺序流需要满足一定的条件才能被执行。从网关(Gateway)、活动(Activity)、 事件(Event)的离开的顺序流,允许为它设定规则条件,引擎在执行网关、活动的后继拆分路线 时,将通过评估条件的连线作为选择路径。

2025-07-23 18:30:00 827

原创 java每日精进 7.22【流程设计4.0(子流程和多实例)】

内嵌子流程又叫嵌入式子流程,它是一个可以包含其它活动、分支、事件,等的活动。我们通 常意义上说的子流程通常就是指的内嵌子流程,它表现为将一个流程(子流程)定义在另一个流程 (父流程)的内部,子流程作为父流程的一部分。子流程是主流程中的一部分流程片段,并非独立 的流程定义,一般作为局部通用逻辑处理,或者因为特定业务需要,使比较复杂的单个主流程设计 清晰直观。事件子流程是 BPMN 2.0 中加入的新元素,它是指通过事件触发的子流程,可以存在于在流程 级别,或者任何子流程级别。

2025-07-22 18:30:00 817

原创 java每日精进 7.21【流程设计1.0(Uel表达式和流程设计)】

空开始事件意味着没有指定启动流程实例的触发条件。它是最常见的一种开始事件,一般需要人工启动,或通过API触发formKey: 引用表单定义,用户需要在启动新流程实例时填写该表单。定时器启动事件(timer start event)用于在指定的时间启动一个流程,或者在一定周期内循环启动多次流程,如在2023年8月1日10时整发起年度目标审核流程, 或每月1日0时开始启动财务结算处理流程。当满足设定的时间条件时,定时器开始事件被触发,从而启动流程。

2025-07-21 11:00:59 726

原创 java每日精进 7.10【Flowable】

创建流程定义查询。返回示例: 挂起流程定义,阻止新实例启动。示例: 激活挂起的流程定义。示例: 获取流程定义。返回示例基础知识:掌握 Java、Spring Boot、BPMN 2.0(包括其核心元素、XML 结构和执行语义)以及 Flowable 核心服务是使用 Flowable 的前提。核心服务。

2025-07-10 17:54:37 651

原创 java每日精进 6.18【工作流】

本文详细介绍了使用Flowable工作流引擎实现请假审批流程的全过程

2025-06-18 18:30:00 581

原创 java每日精进 6.11【消息队列】

本文探讨了基于Spring Event和Redis两种消息队列的实现方案。在Spring Event方案中,通过StringTextController接收请求,StringTextProducer发布事件,StringTextConsumer异步处理,分析了事件匹配机制及多种消费者选择方案(条件注解、自定义路由等)。Redis方案则实现了两种消息模型:RedisStream用于可靠消息队列,RedisPub/Sub用于广播消息。

2025-06-11 21:00:00 646

原创 java每日精进 6.10【定时任务】

职责:RESTful API 控制器,接收客户端 HTTP 请求(如创建、更新、查询任务),调用 JobService 处理业务逻辑,返回 CommonResult。依赖@Resource private JobService jobService:注入服务层,调用其方法实现任务管理。调用关系被客户端通过 HTTP 请求调用(如 POST /infra/job/create)。调用 JobService 的对应方法(如 createJob、getJob)。

2025-06-10 09:14:49 936

原创 java每日精进 5.30【HTTP接口签名防篡改】

防止篡改:确保请求参数、头和体在传输过程中未被修改。验证调用方身份:通过共享密钥确认请求来自合法调用方。防止重放攻击:确保请求不会被恶意重复使用。这种机制在微信支付、支付宝等 API 中广泛应用,适用于涉及敏感数据交换的场景。

2025-05-30 18:30:00 333

原创 java每日精进 5.29【请求限流】

Class<?解释属性time 和 timeUnit:限流时间窗口,默认 1 秒。count:时间窗口内的最大请求次数,默认 100。message:超限时的错误提示,默认为 TOO_MANY_REQUESTS 消息。keyResolver:键解析器,支持 DefaultRateLimiterKeyResolver(全局)、UserRateLimiterKeyResolver(用户)、ClientIpRateLimiterKeyResolver(IP)等。

2025-05-29 17:30:00 614

原创 java每日精进 5.28【幂等性】

String message() default "重复请求,请稍后重试";Class<?解释属性timeout 和 timeUnit:键的过期时间,默认 1 秒。message:重复请求的错误提示。keyResolver:键解析器,支持 DefaultIdempotentKeyResolver(全局)、UserIdempotentKeyResolver(用户级别)、ExpressionIdempotentKeyResolver(自定义 SpEL)。

2025-05-28 18:00:00 643

原创 java每日精进 5.27【异步实现】

在 ApiAccessLogApi 接口中,定义异步方法 createApiAccessLogAsync,并添加 @Async 注解。/*** 创建 API 访问日志* @param createDTO 创建信息*//*** 【异步】创建 API 访问日志* @param createDTO 访问日志 DTO*/@Async解释:同步方法,执行日志插入逻辑。:异步方法,通过 @Async 标记,调用同步方法。default 关键字允许在接口中提供默认实现。@Async。

2025-05-27 19:30:00 868

原创 java每日精进 5.27【分布式锁】

*** System Redis Key 枚举类*//*** 指定部门的所有子部门编号数组的缓存* <p>* KEY 格式:dept_children_ids:{id}* VALUE 数据类型:String 子部门编号集合*//*** 角色的缓存* <p>* KEY 格式:role:{id}* VALUE 数据类型:String 角色信息*//*** 用户拥有的角色编号的缓存* <p>* KEY 格式:user_role_ids:{userId}

2025-05-27 18:45:00 710

原创 java每日精进 5.26【本地缓存】

在 RoleService 接口中定义 initLocalCache 方法,用于初始化本地缓存。/*** 初始化角色的本地缓存*/解释目的:定义接口方法,方便后续在服务层实现缓存初始化逻辑,并允许其他组件(如消费者)调用。原因:通过接口定义,保持代码的模块化和可扩展性,尤其是在分布式环境中需要刷新缓存时,可以直接调用此方法。为实现分布式环境下的缓存同步,定义 RoleRefreshMessage 类,作为 Redis Pub/Sub 的消息载体。@Data解释继承。

2025-05-26 18:30:00 1633

原创 java每日精进 5.25【Redis缓存】

项目定义了一个数据对象 OAuth2AccessTokenDO,用于表示存储在 Redis 中的访问令牌结构。@Data@TableId// 主键// 访问令牌// 刷新令牌// 用户编号// 用户类型// 用户信息// 客户端编号// 授权范围// 过期时间解释作用:OAuth2AccessTokenDO 是一个数据对象(DO),用于映射数据库表 system_oauth2_access_token 和 Redis 中的缓存数据。注解。

2025-05-25 20:48:22 804

原创 java每日精进 5.22【多数据源(读写分离)、事务】

以下是一个简单的 Seata 分布式事务示例,模拟两个服务(UserService 和 StudentService)分别操作 buysys 和 mysql_test。以下是一个示例,展示 UserService 调用 StudentService 和自身方法,分别操作 buysys 和 mysql_test 数据库。以下是一个在 UserService 中使用 @Transactional 注解的示例,操作 buysys 数据库的 user 表。

2025-05-22 17:30:00 1518

原创 java每日精进 5.20【MyBatis 联表&分页查询】

MyBatis XML 是一种传统的 MyBatis 使用方式,通过在 XML 文件中编写 SQL 语句,并结合 Mapper 接口和 Service 层实现分页查询。分页需要手动编写两条 SQL 语句:一条查询分页数据列表,另一条查询总记录数。分页参数(如页码和每页大小)通过 LIMIT 语句手动实现。`order` o ON u.id = o.user_id -- 注意这里应该是 user_id 而不是 o.id。

2025-05-20 21:30:00 642

原创 java每日精进 5.19【Excel 导入导出】

导出流程前端触发:用户在 post/index.vue 点击“导出”按钮,调用 handleExport,发送 GET /admin-api/system/post/export 请求。后端查询:PostController 查询岗位数据(PostDO),转换为 PostRespVO。后端生成 Excel:ExcelUtils.write 使用 EasyExcel 将 PostRespVO 列表写入 Excel,设置响应头。前端下载。

2025-05-19 18:00:00 1359

原创 java每日精进 5.18【文件存储】

前端代码作用前端基于 Vue3 和 Element Plus,使用 ElUpload 组件实现文件上传,核心代码在 useUpload 方法中。支持两种模式:前端直传(client)和后端上传(server)。配置文件设置 VITE_UPLOAD_TYPE=client,启用前端直传。配置后端 API 地址(VITE_BASE_URL 和 VITE_API_URL)。生成文件名使用 SHA256 算法基于文件内容生成唯一文件名,防止冲突。作用:确保文件名全局唯一,避免覆盖。

2025-05-18 22:20:15 1035

原创 java每日精进 5.15【分页实现】

对象转换是指将一种类型的对象(如数据库实体 UserDO)转换为另一种类型的对象(如前端响应对象 UserVO 或服务层 DTO)。例如,一个 UserDO 包含用户 ID、姓名和部门 ID,我们需要将其转换为 UserVO,包含 ID、姓名和部门名称。这种转换在分层架构(如 Controller、Service、DAO)中非常常见。对象转换MapStruct:高性能,适合复杂映射,需配置 @Mapping。BeanUtils:简单易用,适合字段名一致的场景,支持 Consumer 扩展。数据翻译。

2025-05-17 17:30:00 739

原创 java每日精进 5.15【分页实现】

前端使用实现分页,结合搜索功能,展示租户列表。代码位于 tenant/index.vue,以下是核心部分的分析和注释。JavaScript 逻辑。

2025-05-15 18:30:00 988

原创 java每日精进 5.14【参数校验】

当内置注解不足以满足需求时,可自定义校验注解。@Target({})String message() default "手机号格式不正确";Class<?Class<?解析@Target:指定注解可用于字段、方法、参数等。@Retention:运行时保留,供校验器读取。@Constraint:绑定校验器 MobileValidator。message:自定义错误提示。

2025-05-14 20:30:00 793

原创 java每日精进 5.13【异常处理】

在 RESTful API 中,为了确保前端能够一致地处理后端响应,项目使用 CommonResult 类定义统一的响应格式。

2025-05-13 17:53:18 794

原创 java每日精进 5.11【WebSocket】

用户在输入框输入消息内容(sendText选择特定接收用户(sendUserId点击发送按钮触发方法构造消息内容JSON:text: "Hello", // 消息内容toUserId: 123 // 目标用户ID包装为WebSocket标准格式:type: "demo-message-send", // 消息类型content: '{"text":"Hello","toUserId":123}' // 字符串化的内容通过send()方法发送setupserverserver。

2025-05-12 17:53:07 1212

原创 java每日精进 5.08【框架之数据权限补充】

如果想要自定义数据权限规则,只需要实现DataPermissionRule (opens new window)数据权限规则接口,并声明成 Spring Bean 即可。/*** 数据权限规则接口* 通过实现接口,自定义数据规则。例如说,*//*** 返回需要生效的表名数组* 为什么需要该方法?Data Permission 数组基于 SQL 重写,通过 Where 返回只有权限的数据。

2025-05-08 20:30:00 705

原创 面试问题总结(回忆版)

Webpack是一个功能强大的前端资源构建工具,它能够将项目中的多个模块按照依赖关系进行静态分析,并生成一个或多个打包后的文件。通过加载器和插件的使用,Webpack能够处理各种类型的文件,并扩展其功能。同时,Webpack提供了丰富的配置选项和高级功能,如代码分割和tree shaking等,以满足前端开发中的各种需求。

2025-05-08 19:00:00 1444

原创 java每日精进 5.07【框架之数据权限】

数据权限,实现指定用户可以操作的数据。数据权限不支持指定用户只能查看;。目前可以使用实现一定程度的字段权限控制;

2025-05-07 22:00:00 1440

原创 java每日精进 5.06【框架之功能权限】

这个RBAC权限系统基于Spring Security和Token认证机制

2025-05-06 22:00:00 1565

原创 java每日精进 4.29【框架之自动记录日志并插入如数据库流程分析】

1.无默认值的字段必须显式指定;2.@Repeatable(让被注解的注解可重复使用。当一个注解被注解修饰时,就意味着在同一个元素上能够多次使用该注解)3.@Target4.@Retention(表示该注解在运行时可见,这样就能通过反射机制在运行时获取注解信息)5.@Inherited(若一个注解被@Inherited修饰,那么该注解会被子类继承。也就是说,若一个类被该注解标注,其所有子类也会自动拥有这个注解。

2025-04-29 21:00:00 1020

原创 TransmittableThreadLocal vs ThreadLocal 区别代码示例

下面我将通过代码示例展示两者的关键区别,特别是在线程池场景下的不同表现。

2025-04-27 19:00:00 458

原创 java每日精进 4.26【多租户之过滤器及请求处理流程】

MyBatis拦截器不是Servlet Filter在Service层执行SQL时触发。

2025-04-26 19:50:23 856

原创 java每日精进 3.25【SpringCloud杂谈之Nacos】

在Nacos的ui界面创建配置集:读取配置文件使用浏览器,访问 http://127.0.0.1:8080/demo/test01 接口,测试 注解的配置属性类,返回结果如下,符合预期:{ "payTimeoutSeconds": 60, "createFrequencySeconds": 120} 使用浏览器,访问 http://127.0.0.1:8080/demo/test02 接口,测试 注解的

2025-03-26 08:00:00 316

原创 java每日精进 3.21 【SpringBoot规范2.0】

2021-07-13 14:57:01.411 INFO 34836 --- [ scheduling-1] com.didispace.chapter71.ScheduledTasks : 现在时间:14:57:012021-07-13 14:57:06.412 INFO 34836 --- [ scheduling-1] com.didispace.chapter71.ScheduledTasks : 现在时间:14:57:06。

2025-03-21 19:00:00 709

原创 java每日精进 3.21 【Springboot规范1】

Component// 省略getter和setter。

2025-03-21 17:00:00 877

原创 java每日精进 3.20 【内网无网络环境配置nginx转发】

因为公司内网没有nginx以及gcc编译环境,so.......直接安装nginx以及附属配置包,配置包又依赖gcc,gcc有一堆依赖,下载过于麻烦。

2025-03-20 18:30:00 968

原创 java每日精进 3.19 【工作流】

流程定义是工作流的蓝图,通常用 BPMN 2.0(Business Process Model and Notation)标准定义。它描述了流程的步骤、顺序、条件、参与者等。<process id="leaveProcess" name="员工请假流程" isExecutable="true">运行 HTMLid:流程的唯一标识符。name:流程的名称。:表示该流程是否可执行。这段代码定义了一个简单的员工请假流程,包括以下步骤:员工发起请假申请。提交请假申请。流程进入决策网关。

2025-03-19 19:45:00 2205

原创 java每日精进 3.12 【WebSocket进阶】

上述WebSocket 应用,包括用户认证、会话管理、消息处理等功能。通过分层设计和模块化实现,代码具有良好的扩展性和可维护性。适用于需要 WebSocket 支持的实时通信场景,如在线聊天、实时通知等。

2025-03-13 19:00:00 730

原创 java每日精进 3.12 【WebSocket 实时通信基础】

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,允许客户端和服务器之间进行实时、双向的数据传输。与传统的 HTTP 请求-响应模式不同,WebSocket 提供了持久化的连接,适合需要实时通信的场景,如聊天应用、实时通知、在线游戏等。

2025-03-12 19:30:00 1048 1

Java学习Day51:紫云山金丹培育基地(移动端开发之多表联查,发送短信验证码)

Java学习Day51:紫云山金丹培育基地(移动端开发之多表联查,发送短信验证码)

2024-10-23

Java学习Day50:唤醒八戒(Excel相关)

Java学习Day50:唤醒八戒(Excel相关)

2024-10-22

Java学习Day45:兰喜村(Redis)

jedisUtils.java

2024-10-14

Java学习Day45:兰喜村(Redis)

jedis.properties

2024-10-14

项目里程碑1,学生实习管理系统1.0

学生实习管理系统1.0

2024-10-11

SSM框架保存,包含两个ssm框架的项目基础

SSM框架保存,包含两个ssm框架的项目基础

2024-10-01

梅瑟莫帮我学Java之学生考试系统(中残缺版)

梅瑟莫帮我学Java之学生考试系统(中残缺版)

2024-07-27

空空如也

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

TA关注的人

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