- 博客(1129)
- 收藏
- 关注
原创 xxl-job 阻塞策略,丢弃后续调度,原理及场景
"丢弃后续调度"策略的核心价值在于保护系统免受过载影响,适用于那些:🔄执行时间不确定的任务📊数据具有时效性的采集任务🚨避免重复操作的监控任务💾资源消耗较大的批处理任务关键决策点:如果任务执行失败或丢弃不会影响业务核心流程,且重复执行无意义,那么"丢弃后续调度"是最佳选择。
2025-11-21 18:02:02
442
原创 job批处理场景
场景,往一个中间表中不断的写入数据,需要通过job同步到第三方系统,一次500,5min写一次,status未同步,已同步,同步失败。王中间表写入量,会变,有时候写入几百,有时候几万,根本处理不完。6,xxl-job事务管理问题,加还是不加,加了会导致大事务,数据库连接无法释放问题吗。4,分片概念,是不是只有elasticJob有,xxl-job如何实现。7,xxl-job 阻塞策略,丢弃后续调度,原理及场景。3,如何通过job分片,提升处理能力。5,分片,调度器,执行器,关系及原理。
2025-11-21 17:44:32
202
原创 自定义线程池,实现线程池隔离
这个装饰器通过上下文捕获与恢复统一异常处理资源自动清理三大机制,解决了线程池环境中常见的上下文丢失、异常吞没、内存泄漏等问题,大大提升了异步编程的可靠性和可维护性。
2025-11-06 18:42:38
759
原创 Seat 事务@GlobalTransactional传播行为
一个普通事务注解的方法,调用一个分布式事务注解方法分布式事务注解方法:包含一个本地更新,和两个外部服务更新操作,涉及三个服务。
2025-09-05 16:55:50
1036
原创 电商拉单分析
这是一个基于XXL-Job的定时任务,每5分钟执行一次,用于从拼多多平台增量拉取多个店铺的订单数据。为每个店铺维护一个Redis时间戳,记录上次成功拉取的时间,本次拉取则从上次时间开始,到当前时间前20分钟结束,以避免拉取到处于“中间状态”的订单(如未完成的订单)。场景开始时间 (finalDateQ结束时间 (finalDateE是否更新Redis常规增量Redis中记录的时间当前时间 - 20分钟是首次/异常max(Redis时间, 当前时间-50分钟)当前时间 - 20分钟是手动补数据。
2025-08-26 13:40:11
789
原创 深分页实战
两个不同对象列表对象(容器,很小)数据对象(内容,很大)释放时机无其他引用:每次循环结束都可释放有其他引用:只有容器可释放,数据要等到引用消失流式处理优势:避免创建额外的引用,让GC可以及时回收内存内存溢出风险:来自于数据对象被长期引用,而不是临时的小容器对象这就是为什么流式处理可以处理海量数据而不会内存溢出的根本原因!
2025-08-25 18:11:01
1191
原创 ForkJoinPool 公共线程池 默认的核心,最大线程多少,队列多少
虽然默认配置不能直接修改,但可以通过系统参数调整:bash# 设置并行级别(核心线程数)# 设置线程工厂(高级用法)# 设置异常处理器(高级用法)
2025-08-24 16:54:07
745
原创 工具类是否可以依赖注入其他bean
根据您提供的上下文,这个问题涉及 [LbsUtils](file://C:\Users\NLDS\workspace\cloud-wms\wms-portal\src\main\java\com\cloud\wms\service\utils\LbsUtils.java#L19-L46) 类中 `@Resource` 注解的依赖注入失败。业务逻辑类(如 `@Service`、`@Controller` 等)会被Spring容器管理,因此可以正常注入依赖。- 生成一个私有的无参构造函数,防止外部实例化。
2025-08-24 16:40:57
815
原创 ERP 包含内容
如果需要针对某个行业(如电商、制造)或具体系统(如SAP、聚水潭)的深入分析,可以进一步探讨!:符合财务、税务、行业监管要求(如GDPR、GSP)。:是否支持与现有系统(CRM、WMS、支付系统)对接。:客户管理、销售订单(SO)、价格策略、发货管理。:总账、应收/应付账款、固定资产管理、税务管理。:供应商管理、采购订单(PO)、比价、合同管理。:BOM(物料清单)管理、生产计划、工单管理。:人事档案、考勤、薪资计算(Payroll)。:生产排程、设备管理、质量管理(QC)。
2025-08-19 10:25:05
848
原创 奇门 聚水潭 聚石塔 作用,关系
通过标准化接口(API)打通品牌商、经销商、物流服务商等各方的系统(如ERP、WMS、TMS等),实现供应链全链路协同。:为ISV(独立软件开发商,如ERP服务商)提供阿里云服务器资源,确保商家数据符合阿里生态规则(如订单隐私保护)。是三个不同的系统或平台,分别由不同公司推出,功能定位和适用场景也有所差异。:帮助商家在阿里生态(天猫、淘宝、零售通等)内实现库存共享、订单自动流转。ERP服务商(如聚水潭、旺店通)需接入天猫/淘宝时,必须部署在聚石塔上。:统一处理淘宝、京东、拼多多、抖音等平台的订单。
2025-08-19 10:23:31
952
原创 内部调用 - AopContext.currentProxy()
throw new ServiceException(StringUtils.format("该来源订单号已存在:{}", param.getSourceOrderCode()));System.out.println("AOP代理暴露已启用,当前代理: " + proxy.getClass().getName());log.debug("当前AOP代理对象: {}", currentProxy.getClass().getName());// 直接调用,分布式锁失效。// 直接调用,事务失效。
2025-08-11 10:01:26
962
原创 xxl-job轮询+单机串行会导致重复执行吗
答:你提出了一个非常关键的问题。让我详细分析一下这种情况:## 轮询+单机串行下的任务执行分析### 1. 任务重复执行的可能性**结论:不会重复执行相同的数据**### 2. 具体执行流程分析```时间线:T1: 任务A开始执行 -> refreshSyncTask获取任务[1,2,3,4,5]T2: 任务A处理中,状态更新为PROCESSINGT3: 调度时间到,任务B开始调度T4: 任务B执行refreshSyncTask重新查询数据库。
2025-08-08 16:43:04
1048
原创 请列举xxl-job多实例部署导致任务被重复执行原因,及解决方案
appname: order-sync-executor // 错误地使用了相同的执行器名称。appname: order-sync-executor // 应用A的执行器名称。appname: order-sync-executor // 专门处理订单同步。执行器地址: http://order-executor/ // 服务名而非负载均衡地址。执行器地址: http://xxl-job-executors/ // 负载均衡地址。// 正确做法1: 调度中心直接配置各节点地址。
2025-08-08 16:24:50
1204
原创 XXL-JOB多实例
多个XXL-JOB实例同时执行 多实例指部署多个xxl-job是吗,多个实例都会存在任务被重复执行的情况吗,如何避免。你提出了一个很好的问题。应用节点A: 192.168.1.10:8080 (运行cloud-order应用)应用节点B: 192.168.1.11:8080 (运行cloud-order应用)3. **正常情况下不会重复执行**:路由策略确保每次只有一个节点执行任务。1. **多实例部署**:指的是同一应用部署在多个服务器节点上。2. **路由策略**:决定了调度中心选择哪个节点执行任务。
2025-08-08 16:10:33
636
原创 XXL-JOB执行器 与 部署的应用服务器
调度中心 (http://192.168.1.100:8080/xxl-job-admin)├── 192.168.1.11:8080 (应用服务器B + XXL-JOB执行器)├── 192.168.1.10:8080 (应用服务器A + XXL-JOB执行器)└── 192.168.1.12:8080 (应用服务器C + XXL-JOB执行器)调度中心 (192.168.1.100:8080/xxl-job-admin)2. **逻辑上**:是集成了XXL-JOB客户端组件的应用进程。
2025-08-08 16:08:01
459
原创 用户微信公众号的openid 始终固定的吗
OpenID 在同一个公众号下是固定的,适合用于识别用户。如果需要跨公众号识别用户(如多个小程序、公众号互通),建议使用UnionID(需绑定开放平台)。如果有更复杂的需求(如用户账号体系打通),建议结合 UnionID 和业务数据库存储关联信息。
2025-08-08 08:58:53
560
原创 xxl-job配置相同,执行顺序
两个任务,同一个执行执行器,相同时间,路由策略第一个,阻塞策略,单机串行,先执行哪个,按任务ID排序吗,先创建的任务先执行。
2025-08-05 19:51:34
596
原创 类内部方法调用,自注入避免AOP失效
/ 问题:可能注入原始对象而非代理对象。5. **设计模式标准**:这是Spring框架推荐的处理同类调用AOP失效的标准解决方案。// 原始Bean: AbstractSyncTaskHandler (实际业务逻辑)2. **确保代理对象**:保证获得的是包含AOP增强的代理对象而非原始对象。// 如: SalesCreateSyncTaskHandler的代理对象。// AbstractSyncTaskHandler是抽象类。// 代理Bean: Proxy (包含AOP增强逻辑)
2025-08-05 18:54:24
978
原创 两个任务同一个调用时间 CRON:0 0 3 * * ?,具体如何调度的,及任务如何执行的
xxLjob两个任务 pullGuanjiaSalesJob,不同的执行参数,配置了同一个 @XxlJob("pullGuanjiaSalesJob")两个任务同一个调用时间 CRON:0 0 3 * *?,具体如何调度的,及任务如何执行的。(串行执行),调度中心会按任务ID顺序依次触发(前一个任务执行完成后,再触发下一个)。:相同 CRON 的任务会同时触发,但执行顺序受阻塞策略控制。会定期扫描任务表(默认每秒一次),检查到达触发时间的任务。执行器接收到任务后,会提交到内置的线程池(默认核心线程数为。
2025-08-05 18:38:12
1102
原创 xxLjob两个任务 pullGuanjiaSalesJob,不同的执行参数,配置了同一个 @XxlJob(“pullGuanjiaSalesJob“),为什么可以这样配置,执行原理是什么
/ 参数解析(例如 param="type=daily")下面详细解释为什么可以这样配置,以及它的执行逻辑。中,多个任务(即使参数不同)可以配置为同一个。)接收到任务请求后,会根据参数执行不同的逻辑。,可以在调度中心灵活调整参数,而无需修改代码。不同,调度中心仍然会将其视为不同的任务。找到对应的执行器方法,并传递不同的参数。,可能会并发执行,需考虑加锁或幂等性处理。,是 XXL-JOB 的一个强大特性。方法内部根据参数执行不同的逻辑。,不需要为每个任务写单独的方法。:适合参数化任务,避免重复代码。
2025-08-05 18:34:08
1104
原创 为什么不用rocketmq直接发送,用StreamBridge
是 Spring Cloud Stream 的抽象接口,底层可动态切换 Binder(RocketMQ/Kafka/RabbitMQ),// 需手动处理序列化。适用于大多数场景,尤其是需要维护多环境(如开发用 Kafka,生产用 RocketMQ)或未来可能切换消息中间件的项目。:RocketMQ 需提前配置 Producer Group 和 Topic,动态发送新 Topic 需代码或配置调整。会将代码与 RocketMQ 强绑定,切换消息中间件(如改用 Kafka)需修改大量代码。
2025-08-05 17:24:10
691
原创 StreamBridge 发送MQ消息
是 Spring Cloud Stream 提供的一个工具类,用于动态发送消息到绑定目标(如 Kafka、RabbitMQ 等消息中间件)。,你可以灵活集成 O2O 业务中的消息通知(如订单状态更新、优惠券发放等),而无需强依赖固定的绑定配置。的作用是向指定的消息通道(topic/exchange)发送消息。:要发送的消息体,可以是任意对象(Spring 会自动序列化,如 JSON)。-- 具体 binder(如 Kafka/RabbitMQ) -->// 重试或补偿逻辑。:目标消息通道的名称(如。
2025-08-05 17:23:35
671
原创 Doris json_contains 查询报错
根据错误信息,Doris数据库的JSON_CONTAINS函数签名不匹配。Doris要求第二个参数也是JSON格式,而不是字符串。需要对代码进行改造以兼容Doris的JSON函数语法。
2025-08-03 15:41:58
250
原创 Execute如果没有自定义异常处理器,异常可能仅打印而未被业务逻辑处理。不是会抛出异常吗,业务层try catch不行吗
/ Exception in thread "pool-1-thread-1" java.lang.RuntimeException: 任务内部异常。System.out.println("捕获到异常: " + e.getCause());// 实际业务异常在这里!log.error("线程 {} 抛出异常: {}", thread.getName(), e);System.err.println("业务捕获异常: " + e);System.out.println("业务捕获异常: " + e);
2025-07-22 17:30:45
1013
原创 线程池excutor 和 submit区别 关于异常处理,请详细说明,会吞掉异常吗,需要捕获吗
/ 抛出 ExecutionException,原因是被包装的原始异常。:异常会向上传播,但如果没有自定义异常处理器,可能仅打印日志而未被业务代码捕获。:如果任务中抛出未捕获的异常,会直接终止当前线程,并通过线程池的。:如果没有自定义异常处理器,异常可能仅打印而未被业务逻辑处理。// 不调用 future.get(),异常被“吞掉”异常直接导致线程终止,但线程池会创建新线程替代。自定义处理逻辑,否则异常可能被忽略(仅打印)。:异常直接抛出,但需自定义处理器避免丢失。,异常不会主动抛出,看似被“吞掉”。
2025-07-22 17:28:15
614
原创 线程池excutor 和 submit区别
在 Java 线程池中,execute()和submit()是提交任务的两种主要方法,它们在使用方式、返回值、异常处理等方面有显著区别。RunnableCallableFutureget()execute()javaRunnable,无返回值。任务异常会抛出到线程池的未捕获异常处理器(默认打印堆栈)。// 对 Runnable 的封装// 支持 Callable// 指定返回结果RunnableCallable。
2025-07-22 17:27:30
1007
原创 线程池默认拒绝策略,有什么影响,会影响后续任务执行吗
如果调用方未捕获异常,任务会直接丢弃,可能导致业务逻辑不完整(例如提交的订单处理任务被拒绝)。例如:任务被拒绝时,转存到 Kafka/RocketMQ 异步重试。生产环境建议根据业务场景选择合适的拒绝策略,并配套监控和降级方案。// 处理策略:记录日志、降级、存入重试队列等。或自定义策略(如将任务存入数据库/队列后续重试)。已在线程池队列中的任务会继续执行,拒绝策略仅作用于。),但可能表明资源不足(需调整参数或优化任务)。是否影响后续任务取决于调用方的异常处理逻辑。(直接移交,避免排队)。
2025-07-22 10:33:05
1060
原创 Redis Copy-on-Write机制:
Copy-on-Write机制: 父子进程共享内存页 当父进程修改数据时,内核会复制被修改的页 这可能导致内存使用量暂时增加 通俗的话描述一下可以用一个生活中的例子来通俗解释。
2025-07-22 09:03:50
391
原创 Redis RDB 持久化实现原理,请求是否阻塞,如何处理阻塞请求
Redis RDB (Redis Database) 持久化是通过生成数据快照来实现的,将内存中的数据以二进制格式保存到磁盘上的一个紧凑文件中。
2025-07-22 09:02:53
917
原创 CAS使用自适应自旋 如何实现的
自适应自旋是一种优化CAS性能的技术,它根据历史成功率动态调整自旋次数,在减少CPU空转和提高并发性能之间找到平衡。
2025-07-22 08:49:02
688
原创 CAS缺点
/ 仍然能成功,但中间状态已变化。CAS是一种强大的并发工具,但需要根据具体场景权衡使用,理解其局限性才能发挥最大价值。CAS检查时会认为"没有变化",但实际上已经发生了修改。注意ABA问题,必要时使用带版本的CAS。在高竞争环境下,CAS可能会长时间自旋。退化为锁机制(如JVM的锁升级策略)// 测试CAS vs 同步锁的性能。:锁性能可能优于CAS(避免自旋)低优先级线程持有CAS需要的资源。
2025-07-22 08:48:05
724
原创 Redisson解锁脚本分析
检查锁持有权→ 如果不是当前线程持有 → 返回 nil(解锁失败)是当前线程持有→ 减少重入计数 →如果计数仍>0 → 更新过期时间 → 返回 0(部分解锁)如果计数=0 → 删除锁 → 发布解锁消息 → 返回 1(完全解锁)验证持有权通过计数减1 →删除my_lockkey发布解锁消息返回 1(完全解锁)
2025-07-22 08:36:25
984
原创 Redisson加锁脚本分析
锁不存在→ 初始化锁(设置持有者为当前线程,计数=1)→ 设置过期时间 → 获取成功锁已存在且由当前线程持有→ 增加重入计数 → 更新过期时间 → 获取成功锁被其他线程持有→ 返回锁的剩余生存时间 → 获取失败。
2025-07-22 08:33:55
672
原创 Redisson 加锁解锁原理 实现源码
原子性操作:使用 Lua 脚本保证加锁/解锁操作的原子性可重入支持:通过 Hash 结构记录锁的持有线程和重入次数自动续期:看门狗机制防止业务未完成时锁过期公平锁支持:通过 Redis 的队列实现公平获取锁锁等待机制:通过 Redis 的发布订阅实现锁释放通知。
2025-07-22 08:30:22
568
原创 ThreadLocal 既然是线程级别,为什么线程结束,还会导致内存泄漏
ThreadLocal 虽然是线程级别的变量存储,但仍然可能导致内存泄漏,原因在于 ThreadLocal 的实现机制和引用关系。
2025-07-21 11:08:36
538
原创 ES 更新或新增
只做更新吗,不存在会新增吗您的问题涉及到 Elasticsearch 的更新操作逻辑。在您提供的代码中,这个设置非常关键,它决定了当文档不存在时的行为。
2025-07-21 09:34:06
994
原创 String s1 = “hello“; // 方式1:字面量赋值String s2 = new String(“hello“); // 方式2:new关键字创建 s1 s2都是引用,不都
您的问题涉及一个常见的误解。实际上,String s1和String s2这两个引用本身的存储位置与它们指向的对象是否在字符串常量池中是两个不同的概念。
2025-07-20 12:55:29
486
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1