订单状态定时处理、来单提醒和客户催单 Spring Task介绍Spring Task 是 Spring 框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 应用场景: 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 cron 表达式cron 表达式其实就是一个字符串,通过 cron 表达式可以定义任务触发的时间 构成规则:分成 6 或 7 个域,由空格分隔开,每个域代表一个含义 每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选) 例如:2024 年 10 月 17 日上午 10 点整 对应的 cron 表达式为:0 0 10 17 10 ?2024通常周跟日的位置会有一个问号一个日期 在线生成器:https://cron.ciding.cc/ 入门案例 导入 maven 坐标 spring-context(已存在) 启动类添加注解@EnableScheduling 开启任务调度 自定义定时任务类 订单状态定时处理处理超时订单1234567891011121314151617/** * 定时任务:处理超时订单 ...
有些文字,即使隔了多年,再看时,依然会触动不已。 从你的全世界路过 一个人的记忆就是座城市,时间腐蚀着一切建筑,把高楼和道路全部沙化。如果你不往前走,就会被沙子掩埋。所以我们泪流满面,步步回头,可是只能往前走。 2004 年的时候心灰意冷不想劳动,每天捧着电脑打牌,一打就是十几个钟头。但我的技术很差,毫无章法可言,唯一的优势是打字快,于是创造了自己的战术,叫作废话流。 一发牌,我就开始在聊天框里跟玩家说话:“赤焰天使,你娘舅最近身体好吗?”“天使为嘛是赤焰的呢,会炖熟的,你过日子要小心。”“咦,苍凉之心,好久不见你怎么改名字了?”“毛茸茸你好,帮帮我可以吗,我膝盖肿肿的呢……” 结果很多玩家忍无可忍,啪啪啪乱出牌,骂一句“我去你大爷的”就退出了。这样我靠打字赢了打牌,赚到胜率 75%。后来慢慢不管用,我又想了新招。 我在对话框里讲故事。 系统发牌,我打字:“从前有个神父,他住的村子里最美的姑娘叫小芳。突然小芳怀孕了,死也不肯说是谁的孩子。村民就暴打她,要将她浸猪笼。小芳哭着说,是神父的呢。村民一起冲进教堂,神父没有否认,任凭他们打断了自己的双腿。过了二十年,奇迹发生了。” 然 ...
大学生涯
未读一. 商户查询缓存1. 什么是缓存?缓存就是数据交换的缓冲区(称作Cache),是存贮数据的临时地方,一般读写性能较高。 缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力。 但是缓存也会增加代码复杂度和运营的成本: 2. 添加商户缓存当我们根据id查询商户信息时,我们是直接操作从数据库中去进行查询的,所以我们需要增加缓存, 代码思路先从redis中查询数据,如果名命中,直接返回,如果没有,从数据库中查询,如果有的话添加到redis,直接返回,如果没有,返回查询失败或其他 代码12345678910111213141516171819202122@Servicepublic class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService { @Autowired private StringRedisTemplate stringRedisTemplate; @Overri ...
一.JAVA1.以下哪些线程是线程安全的?(ADE)A. Vector B. HashMap C. ArrayList D. StringBuffer E. Properties 解析: A. Vector是线程安全的动态数组实现,其所有的方法都被synchronized修饰,在多线程环境下可以安全使用,但是性能比ArrayList低 B. HashMap不是线程安全的,在多线程环境下可能出现数据不一致,需要线程安全可以使用ConcurrentHashMap或者Collections.synchronizedMap() C. ArrayList不是线程安全的,多线程环境可能出现并发修改异常 D. StringBuffer是线程安全的可变字符串类,其关键方法都被synchronized修饰,即同步,如果是单线程的话推荐使用StringBuilder E. Properties继承自HashTable,而HashTable是线程安全的实现,其所有方法都是同步的 2. 关于匿名内部类的特性有哪些?📌 基本概念 无类名:编译时自动生成名称(外部类$数字.cl ...
大学生涯
未读一. 开篇导读1. 短信登录这一块我们会使用redis共享session来实现 2. 商户查询缓存通过本章节,我们会理解缓存击穿,缓存穿透,缓存雪崩等问题,让小伙伴的对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容 3. 优惠卷秒杀通过本章节,我们可以学会Redis的计数器功能, 结合Lua完成高性能的redis操作,同时学会Redis分布式锁的原理,包括Redis的三种消息队列 4. 附近的商户我们利用Redis的GEOHash来完成对于地理坐标的操作 5. UV统计主要是使用Redis来完成统计功能 6. 用户签到使用Redis的BitMap数据统计功能 7. 好友关注基于Set集合的关注、取消关注,共同关注等等功能,这一块知识咱们之前就讲过,这次我们在项目中来使用一下 8. 打人探店基于List来完成点赞列表的操作,同时基于SortedSet来完成点赞的排行榜功能 以上这些内容咱们统统都会给小伙伴们讲解清楚,让大家充分理解如何使用Redis 9. 课程总结 二. 短信登录1.导入SQL hmdp.sqla.tb.user 用户表12345678910111 ...
一. 监听器概述1. 监听器的定义监听器:专门用于对域对象对象身上发生的事件或状态改变进行监听和相应处理的对象 监听器是GOF设计模式中,观察者模式的典型案例 观察者模式: 当被观察的对象发生某些改变时, 观察者自动采取对应的行动的一种设计模式 监听器使用的感受类似JS中的事件,被观察的对象发生某些情况时,自动触发代码的执行 监听器并不监听web项目中的所有组件,仅仅是对三大域对象做相关的事件监听 2. 监听器的分类web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类 按监听的对象划分 application域监听器 ServletContextListener ServletContextAttributeListener session域监听器 HttpSessionListener HttpSessionAttributeListener HttpSessionBindingListener HttpSessionActivationListener request域监听器 ServletRequestListener ...
一. 过滤器概述定义: Filter,即过滤器,是JAVAEE技术规范之一,作为目标资源的请求进行过滤的一套技术规范,是JAVA WEB项目中最为实用的技术之一。 Filter 接口定义了过滤器的开发规范,所有的过滤器都要实现该接口(Filter) Filter 的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和HttpServletResponse对象后,会先调用Filter的doFilter方法 Filter的doFilter方法可以控制请求是否继续,如果放行,则请求继续,如果拒绝,则请求到此为止,由过滤器本身做出响应 Filter不仅可以对请求做出过滤,也可以在目标资源做出响应前,对响应再次进行处理 Filter是GOF中责任链模式的典型案例 Filter的常用应用包括但不限于: 登录权限检查,解决网站乱码,过滤敏感字符,日志记录,性能分析… … 二. 应用场景 日志的记录 性能的分析 乱码的处理 事务的控制 登录的控制 跨域的处理 …… 三. 过滤器工作位置图解 四. Filter接口API1. 源码1234567891011packag ...
一. 会话管理概述1. 由来 HTTP是无状态协议 无状态就是不保存状态,即无状态协议(stateless),HTTP协议自身不对请求和响应之间的通信状态进行保存,也就是说,在HTTP协议这个级别,协议对于发送过的请求或者响应都不做持久化处理 简单理解:浏览器发送请求,服务器接收并响应,但是服务器不记录请求是否来自哪个浏览器,服务器没记录浏览器的特征,就是客户端的状态 举例: 张三去一家饭馆点了几道菜,觉得味道不错,第二天又去了,对老板说,还点上次的那几道菜 无状态: 老板没有记录张三是否来过,更没有记录上次他点了那些菜,张三只能重新再点一遍 有状态: 老板把每次来吃饭的用户都做好记录,查阅一下之前的记录,查到了张三之前的菜单,直接下单 2. 实现手段cookie跟session配合解决 cookie是在客户端保留少量数据的技术,主要通过响应头向客户端响应一些客户端要保留的信息 session是在服务端保留更多数据的技术,主要通过HttpSession对象保存一些和客户端相关的信息 cookie和session配合记录请求状态 二. cookie1. cookie概 ...
大学生涯
未读一. Stream流的基础概念1. 什么是Stream流?Stream是元素的序列,支持对数据源(集合、数组、I/O等)进行聚合操作。其核心特点包括:• 不存储数据:仅通过管道传递数据,原始数据不受影响。• 惰性求值:中间操作延迟执行,只有终端操作触发时才计算。• 并行处理:通过parallelStream()轻松实现多线程处理。 2. 与传统集合操作的对比• 代码简洁性:用filter、map等链式调用替代冗长的循环和临时变量。• 性能优化:并行流自动拆分任务,充分利用多核CPU。 二. stream体验版demo1234567891011121314151617181920212223242526272829303132333435363738394041package com.nianxi.streamDemo;import java.util.ArrayList;/** * @author Jie. * @description: TODO * @date 2025/3/17 * @version: 1.0 */public class StreamDemo1 ...
大学生涯
未读一. 不可变数组注意: 以下不可变集合工厂方法都是在java 9引入的,在之前只能通过Collections下的unmodifiableXxx()通过包装可变集合为不可变视图,但本质上仍是可变集合的代理,并非独立的不可变实现,以及一些第三方库才能获得不可变集合 Map.of() / Map.ofEntries():创建不可变 Map。 List.of():创建不可变 List。 Set.of():创建不可变 Set。 尝试添加、删除或修改元素会抛出 UnsupportedOperationException。 二. java中9之前跟9之后的关键区别 特性 Java 9 不可变集合 Java 8 及更早的 Collections.unmodifiableXxx() 实现类型 独立的不可变类(如 ImmutableMap) 可变集合的包装视图(非独立类) 内存占用 更紧凑(针对小集合优化) 与原可变集合相同 性能 更快的遍历和查询操作 与原集合性能一致 线程安全性 完全线程安全 需依赖原集合的线程安全策略 三. 示例demo1. List.of() ...