订单状态定时处理、来单提醒和客户催单 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%。后来慢慢不管用,我又想了新招。 我在对话框里讲故事。 系统发牌,我打字:“从前有个神父,他住的村子里最美的姑娘叫小芳。突然小芳怀孕了,死也不肯说是谁的孩子。村民就暴打她,要将她浸猪笼。小芳哭着说,是神父的呢。村民一起冲进教堂,神父没有否认,任凭他们打断了自己的双腿。过了二十年,奇迹发生了。” 然 ...
大学生涯
未读ObjectObject 类的常见方法有哪些?Object 类是一个特殊的类,是所有类的父类,主要提供了以下 11 个方法: 1234567891011121314151617181920212223242526272829303132333435363738394041424344/** * native 方法,用于返回当前运行时对象的 Class 对象,使用了 final 关键字修饰,故不允许子类重写。 */public final native Class<?> getClass()/** * native 方法,用于返回对象的哈希码,主要使用在哈希表中,比如 JDK 中的HashMap。 */public native int hashCode()/** * 用于比较 2 个对象的内存地址是否相等,String 类对该方法进行了重写以用于比较字符串的值是否相等。 */public boolean equals(Object obj)/** * native 方法,用于创建并返回当前对象的一份拷贝。 */protected native Object clone() ...
大学生涯
未读StringString、StringBuffer、StringBuilder 的区别?可变性 String 是不可变的(后面会详细分析原因)。 StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串,不过没有使用 final 和 private 关键字修饰,最关键的是这个 AbstractStringBuilder 类还提供了很多修改字符串的方法比如 append 方法。 12345678910111213abstract class AbstractStringBuilder implements Appendable, CharSequence { char[] value; public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len ...
大学生涯
未读面向对象基础面向对象和面向过程的区别面向过程编程(Procedural-Oriented Programming,POP)和面向对象编程(Object-Oriented Programming,OOP)是两种常见的编程范式,两者的主要区别在于解决问题的方式不同: 面向过程编程(POP):面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。 面向对象编程(OOP):面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。 相比较于 POP,OOP 开发的程序一般具有下面这些优点: 易维护:由于良好的结构和封装性,OOP 程序通常更容易维护。 易复用:通过继承和多态,OOP 设计使得代码更具复用性,方便扩展功能。 易扩展:模块化设计使得系统扩展变得更加容易和灵活。 POP 的编程方式通常更为简单和直接,适合处理一些较简单的任务。 POP 和 OOP 的性能差异主要取决于它们的运行机制,而不仅仅是编程范式本身。因此,简单地比较两者的性能是一个常见的误区。 在选择编程范式时,性能并不是唯一的考虑因素。代码的可维护性、可扩展性和开发效率同样重要。 现代编程语言基本都 ...
大学生涯
未读基本数据类型Java 的基本数据类型Java 中有 8 种基本数据类型,分别为: 6 种数字类型: 4 种整数型:byte、short、int、long 2 种浮点型:float、double 1 种字符类型:char 1 种布尔型:boolean。 这 8 种基本数据类型的默认值以及所占空间的大小如下: 基本类型 位数 字节 默认值 取值范围 byte 8 1 0 -128 ~ 127 short 16 2 0 -32768(-2^15) ~ 32767(2^15 - 1) int 32 4 0 -2147483648 ~ 2147483647 long 64 8 0L -9223372036854775808(-2^63) ~ 9223372036854775807(2^63 -1) char 16 2 ‘u0000’ 0 ~ 65535(2^16 - 1) float 32 4 0f 1.4E-45 ~ 3.4028235E38 double 64 8 0d 4.9E-324 ~ 1.7976931348623157E308 boo ...
大学生涯
未读基本语法1. 注释Java 中的注释有三种: 单行注释:通常用于解释方法内某单行代码的作用。 多行注释:通常用于解释一段代码的作用。 文档注释:通常用于生成 Java 开发文档。 用的比较多的还是单行注释和文档注释,多行注释在实际开发中使用的相对较少。 123456789// 这是单行注释/* * 这是多行注释 *//** * 这是文档注释 */ 在我们编写代码的时候,如果代码量比较少,我们自己或者团队其他成员还可以很轻易地看懂代码,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会执行(编译器在编译代码之前会把代码中的所有注释抹掉,字节码中不保留注释),是我们程序员写给自己看的,注释是你的代码说明书,能够帮助看代码的人快速地理清代码之间的逻辑关系。因此,在写程序的时候随手加上注释是一个非常好的习惯。 .class文件中没有注释 代码的注释不是越详细越好。实际上好的代码本身就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释。 若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。 举个例子: 去掉下面复杂的注释,只需要创建一个与注释所言同一事物的函数 ...
大学生涯
未读基础概念1. Java语言的特点 简单易学(语法简单,上手容易); 面向对象(封装,继承,多态); 平台无关性( Java 虚拟机实现平台无关性); 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持); 可靠性(具备异常处理和自动内存管理机制); 安全性(Java 语言本身的设计就提供了多重安全防护机制如访问权限修饰符、限制程序直接访问操作系统资源); 高效性(通过 Just In Time 编译器等技术的优化,Java 语言的运行效率还是非常不错的); 支持网络编程并且很方便; 编译与解释并存; 2. Java SE vs Java EE Java SE(Java Platform,Standard Edition): Java 平台标准版,Java 编程语言的基础,它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简单的服务器应用程序。 Java EE(Java Platform, Enterprise Edition ):J ...
Gateway官网 一. 概述简介1. Gateway 是什么Spring Cloud Gateway是 Spring 官方基于 Spring Boot 2.x、Spring WebFlux 和 Project Reactor 构建的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的 API路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 ZUUL,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。 2. 什么是网关?网关(Gateway)又称网间连接器,网关在网络层实现服务之间网络互连。用程序的话来说就是请求转发。他就好比小区的门一样,你想进来小区,必须通过门才能进来。为什么要有这个门?为了方便管理以及安全考虑,就好比现在疫情期间,动不动小区封了,假如小区没有门,想要封小区还得费特别大的劲将小区给围住。 再回到程序当中,现在非常流行微服务系统,将整体应用拆分为了多个模块,那么问题来了,前端页面肯定会涉及到调用不同微服 ...
NacosNacos 配置中心在 Spring Boot 项目中,默认会提供一个 application.properties 或者 application.yml 文件, 可以把一些全局性的配置或者需要动态维护的配置写入改文件,比如数据库连接,功能开关,限流阈值,服务地址等。 为了解决不同环境下服务连接配置等信息的差异,Spring Boot 还提供了基于 spring.profiles.active={profile}的机制来实现不同的环境的切换。 1.起源随着单体架构向微服务架构的演进,各个应用自己独立维护本地配置文件的方式开始显露出它的不足之处。 主要有下面几点: 配置的动态更新:在实际应用会有动态更新位置的需求,比如修改服务连接地址、限流配置等。在传统模式下,需要手动修改配置文件并且重启应用才能生效,这种方式效率太低,重启也会导致服务暂时不可用。 配置集中式管理:在微服务架构中某些核心服务为了保证高性能会部署上百个节点,如果在每个节点中都维护一个配置文件,一旦配置文件中的某个属性需要修改,可想而知,工作量是巨大的。 不同部署环境下配置的管理:前面提到通过 pr ...