- 博客(48)
- 收藏
- 关注
原创 业务规则可视化平台使用说明文档V1.2
Drule业务规则可视化平台。基于Drools 封装的业务规则可视化平台,通过(规则表达式/条件/结果动作)、及,实现规则开发效率显著提升,使非技术用户也能快速构建金融风控、智能营销等决策系统。具备优秀的执行性能,测试环境下单次执行耗时最高可达1ms内,90%不超过2ms。。,账号:test,密码:123456。⚠️ 当前系统还在迭代当中,功能有限,还请谅解。
2025-03-05 09:00:00
686
原创 业务规则可视化平台使用说明文档V1.1
Drule业务规则可视化平台。基于Drools 封装的业务规则可视化平台,通过(规则表达式/条件/结果动作)、及,实现规则开发效率显著提升,使非技术用户也能快速构建金融风控、智能营销等决策系统。具备优秀的执行性能,测试环境下单次执行耗时最高可达1ms内,90%不超过2ms。
2025-02-19 09:00:00
1324
原创 业务规则可视化平台使用说明文档V1.0
Drule业务规则可视化平台。基于Drools 封装的业务规则可视化平台,用于简化规则开发,将规则表达式、规则条件和规则动作等进行可视化展示,并降低学习和开发成本,帮助用户快速创建业务规则。项目源码地址:https://gitee.com/ahaow/rule_engine。,账号:test,密码:123456。⚠️ 当前系统还在迭代当中,功能有限,还请谅解。
2025-02-11 17:00:04
759
原创 JSR 269 插入式注解处理
JSR 269 的全称为 “Pluggable Annotation Processing API”,定义了一套用于处理注解的 API,允许开发者根据自己的需求自定义注解处理器,并将其嵌入到 Java 编译器中进行使用。JDK1.6引入了JSR 269规范, 是 Java 标准 API 中定义的插入式注解处理的规范。插入式注解处理是指在编译期间,通过自定义注解处理器对源代码中的注解进行处理,达到读取、修改、添加抽象语法树中的内容。实现自定义注解处理器的第一步就是继承 类,并实现它的 方法,用于定义实际的
2024-12-12 09:00:00
815
原创 ZooKeeper 实战(六) - 分布式ID实现方案
比如本次生成的临时顺序节点的序号为0000000001,也就是1,但是在应用中,不认为这就是单纯的数字1,而是表示1份ID,这一份有100个ID,也可就是从100-199,即序号000000000100-000000000199。在100次ID的生成中,只有一次远程调用,大大提高了系统的并发性能,同时也解决了容量问题,原本只能生成100亿个ID,经过单位转换(ZK中的序号1代表应用中的100),容量提高了100倍。在ZK生成的临时顺序节点ID的前附加时日期时间,以便直观显示此ID的生成日期。
2024-08-26 08:45:00
1663
2
原创 JVM性能调优监控工具
JDK自带了几个JVM性能调优和监控工具,可以帮助诊断和解决Java应用程序的性能问题。以下是其中一些常用的工具:1. jps:Java进程状态工具,用于列出当前系统中运行的Java进程的ID和相关信息。2. jstat:JVM统计信息工具,用于收集和显示Java应用程序中的各种运行时统计信息,如内存、垃圾回收、类加载等。3. jmap:Java内存映像工具,用于生成Heap转储快照,以及查看Java堆中对象的详细信息。4. jstack:Java堆栈跟踪工具,用于生成线程转储快照,以及查
2024-08-17 09:30:00
1451
原创 Java命令选项与JVM参数配置
默认是不开启的,如果开启,那么-XX:+UseParNewGC也会自动被设置。默认是开启的,并行GC时如果有多于98%以上的时间用来gc就会抛出OOM。默认是-1,任何一个负值的设定都表示了用-XX:CMSTriggerRatio来做真实的初始化值。:垃圾最大年龄,设置在自适应GC大小的使用占有最大阈值,默认对于parallel(throughput)的是15,对于CMS的是6。:设置一个在CMS开始前的内存的触发百分比,针对的是由-XX:MinHeapFreeRatio分配的内存。:是否启用线程采样。
2024-08-17 09:30:00
1998
原创 Maven实战(六)- 开发自定义Maven插件
表示该目标是否必须在一个Maven项目中运行,默认为true。这里介绍一款插件maven-invoker-plugin,该插件能够用来在一组项目上执行Maven,并检查每个项目的构建是否成功,最后,它还可以执行BeanShell或者Groovy脚本来验证项目构建的输出。任何一个Mojo都必须使用该注解声明明自己的目标名称,有了目标定义之后,我们才能在项目中配置该插件目标,或者在命令行调用之。这是唯一必须声明的属性,当用户使用命令行调用插件,或者者在POM中配置插件的时候,都需要使用该目标名称。
2024-08-08 08:45:00
2269
原创 Maven实战(五)- Nexus 私服安装与使用
Sonatype Nexus:Sonatype Nexus是一个功能强大的Maven仓库管理软件,支持Maven、Gradle、Ivy等构建工具。它提供了统一的仓库管理平台,具备缓存、代理、分发、安全控制等功能。Nexus还支持插件扩展和LDAP集成等特性,可根据实际需求进行定制和扩展。
2024-08-08 08:30:00
1065
原创 SpringBoot原理解析(三)- Bean的属性注入方式
属性注入是指将需要注入的属性值设置到Bean实例中的操作。Bean的属性可以是基本类型、引用类型,甚至是其他Bean实例。属性注入通常是在对象创建过程中完成的,Spring容器会在Bean实例化之后,检查Bean定义中的注入配置,将配置的属性值注入到Bean中。通过属性注入,我们可以方便地将外部配置文件的值或其他Bean的引用注入到目标Bean中,从而实现组件之间的关联和依赖Spring提供了多种方式来进行Bean的属性注入,包括构造器注入、Setter方法注入、字段注入等。
2024-08-05 08:45:00
1356
原创 Maven实战(四)- 生命周期和插件
Maven的生命周期就是为了对所有的构建过程进行抽象和统一。Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。也就是说,几乎所有项目的构建,都能映射到这样一个生命周期上。
2024-08-03 13:28:34
846
原创 Maven实战(三)- Maven仓库
当Maven需要下载构件的时候,先查看本地仓库,如果本地仓库没有,再请求私服,如果私服也没有,则会从外部的远程仓库进行下载,并缓存在私服上。前者表示发布版本的构件仓库,后者表示快照版本的构件仓库。在此基础上,Maven可以在指定位置上统一存储所有Maven项目共享的构件,在需要这些构件的时候,声明其依赖坐标,Maven会自动根据坐标找到仓库中的构件,并使用它们。的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像。
2024-08-03 10:06:20
6437
1
原创 Spring Cloud开发实战(一)- 万字长文带你搭建一个Eureka+Feign+LoadBalancer 项目
Spring Cloud全家桶是Pivotal团队提供的一整套微服务开源解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等组件。以上组件主要是通过对Netflix OSS套件中的组件进行整合完成的,该开源子项目叫作spring-cloud-netflix,其中比较重要的组件有:spring-cloud-netflix-Eureka:注册中心。
2024-08-01 09:00:00
1208
原创 Maven实战(二)- 坐标与依赖
当前Maven项目所属的实际项目。当一个项目依赖于某个依赖(A),而依赖A又依赖于其他依赖(B、C等),当你在项目中声明A作为依赖时,默认情况下,Maven会自动解析和引入A所依赖的其他依赖。Maven的传递性依赖是指当一个项目依赖于某个库(称为直接依赖),而该库本身又依赖于其他库(称为间接依赖)时,Maven会自动解析和下载这些间接依赖,并将其添加到项目的classpath中。通过传递性依赖,我们可以方便地管理和引用项目所依赖的所有库和其它相关的依赖,而不需要手动处理每一个依赖及其相关的依赖。
2024-08-01 09:00:00
2064
原创 Maven实战(一)- Maven安装与配置
本文基于MacOS安装Maven,所以需要在配置文件`~/.bash_profile`中导出Maven的环境变量设置。输入命令编辑`~/.bash_profile`。vim ~/.bash_profile添加如下内容,导出Maven的环境变量。/Users/xxx/maven/apache-maven-3.6.3 为上节Maven安装解压后的文件目录vexport MAVEN_HOME=/Users/xxx/maven/apache-maven-3.
2024-07-27 21:28:18
1041
原创 SpringBoot原理解析(二)- Spring Bean的生命周期以及后处理器和回调接口
Spring Bean的生命周期指从Bean的创建(实例化)、初始化,到使用(完成)和销毁的整个过程。Bean的实例化阶段:Spring会取出BeanDefinition的信息进行判断当前Bean的范围是否是singleton的, 是否不是延迟加载的,是否不是FactoryBean等,最终将一个普通的singleton的Bean通过反射进行实例化;Bean的初始化阶段:Bean创建之后还仅仅是个"半成品",还需要对Bean实例的属性进行填充、执行一些Aware 接口方法
2024-07-22 11:58:25
1145
原创 SpringBoot原理解析(一)- 基于xml配置bean(Java解析xml文件)
DOM解析器将整个XML文档加载到内存中,并将其表示为树状结构。这意味着可以从根节点开始访问和操作文档中的任何部分,操作简单且灵活。// 创建一个新的DefaultListableBeanFactory实例作为BeanFactory,并进行必要的初始化和配置try {try {// 加载BeanDefinition// XmlBeanDefinitionReader: 用于从XML配置文件中读取Bean的定义信息。
2024-07-22 11:57:01
1401
原创 Drools开源业务规则引擎(六)- Drools Flow中RuleFlow文件即*.rf文件介绍
元素用来定义流程文件的元数据信息。子标签/元素:导入外部的类和包。可以使用这些导入的类和包来定义规则和行为。:定义全局变量,这些变量在整个流程中均可使用。:定义自定义属性,并在流程中进行配置和使用。:定义自定义的函数。:用于定义处理流程中发生的异常情况的异常处理程序。b.属性说明name:导入外部的类和包名。c.示例代码1.2.a.标签格式b.属性说明identifier:全局变量的标识符(名称)。type:全局变量的类型。c.示例代码1.3.
2024-07-10 12:01:01
711
2
原创 Drools开源业务规则引擎(五)- jBPM流程图元素介绍
在 jBPM 中, 是用于定义和配置业务流程的关键元素之一,通过BPMN 2.0规范中的元素表示。表示业务流程的起始和结束点。它定义了一个独立的业务流程,由一系列的活动、网关、事件和连接组成。每个元素都有一个唯一的ID,用于在 jBPM 中唯一标识该流程。主要属性如下:示例开始事件(例如消息、定时器、信号等),用于启动一个流程实例。它标记了流程的开始,作为执行流程的入口点。示例连接器,用于在不同的流程节点之间传递数据和信息顺序流是连接流程中不同活动的一种方式,用于定义活动之间的顺序关系和流程控制。示例关联(
2024-07-08 12:47:27
1483
原创 Drools开源业务规则引擎(四)- 规则流(rule flow)及手把手教你构建jBPM项目
Drools是一个基于Java的业务规则管理系统,提供规则引擎和规则库来支持规则的创建、管理和执行。它允许开发人员根据业务需求创建和维护规则,使用规则引擎来评估和执行这些规则。Drools特别擅长于处理复杂的业务逻辑和规则集,并能够在运行时进行规则的动态加载和改变。jBPM是一个开源的业务流程管理(BPM)系统,用于设计、执行和监控业务流程。它提供了建模器和编辑器来设计和模型化业务流程,并提供了执行引擎来管理和执行这些流程。jBPM可以与Drools规则引擎无缝集成,通过规则节点将规则和决策引入业务流程
2024-07-06 16:18:23
1241
原创 Drools开源业务规则引擎(三)- 事件模型(Event Model)
提供了规则引擎相关的事件监听和处理机制,允许开发者在规则引擎执行过程中监听和处理事件,包括规则触发、断言对象等,并且还有利于将日志记录和应用程序的核心功能(以及规则)分离。允许添加和删除侦听器,以便可以侦听工作内存和agenda的事件。,通过调试打印语句实现每个方法。实现,它提供两个接口,监听器接口默认的实现类。
2024-07-06 16:05:41
1307
原创 Drools开源业务规则引擎(一)- 安装与介绍(构建KieBase)
规则引擎,是业务规则管理系统的一部分,主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模板编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。规则引擎通过业务规则管理系统(BRMS,Business Rule Management System)来实现对业务规则的集中管理和动态执行。灵活性和可配置性:用户通过配置而不是代码编写来定义和管理业务规则。这使得规则可以根据需求进行更加灵活的调整和修改,而无需进行软件开发和发布。可维护性和可扩展性:业务规则的管理和维护变得更加容易。
2024-07-02 09:00:00
3086
原创 Drools开源业务规则引擎(二)- Drools规则语言(DRL)
有效的规则操作是小的、声明性的和可读的。如果需要在规则操作中使用命令式或条件式代码,请将规则划分为多个更小、更具声明性的规则。可以将重复代码或者逻辑性代码封装成一个函数,或者将工具/辅助类中的静态方法导入为函数,然后在规则LHS/RHS部分中按名称使用该函数。DRL文件中的全局变量通常为规则提供数据或服务,如在then中使用的应用程序服务(service),并从规则返回数据。DRL文件中在规则中需要导入使用的对象的完全限定路径和类型名称。是全局的,因此对于该项目中的所有其他规则的查询必须是唯一的。
2024-07-02 09:00:00
1196
原创 ClickHouse快速安装教程(MacOS)
是一个用于在线分析处理(OLAP)的高性能、面向列的SQL数据库管理系统(DBMS)。ClickHouse专门针对大规模数据分析和实时查询的场景进行优化。它被设计用于高效处理PB级以上的数据,并能在秒级内完成复杂的查询分析。OLAP场景的关键特征绝大多数是读请求数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。已添加到数据库的数据不能修改。对于读取,从数据库中提取相当多的行,但只提取列的一小部分。宽表,即每个表包含着大量的列。
2024-06-11 16:20:51
3191
9
原创 ELK 日志监控平台(二)- 优化日志格式
其实细心一点就会发现一个问题,输出到 ES 的日志格式一点也不友好,实际的应用日志信息都集中在message索引字段中,而且日志的实际输出时间也不是应用中打印日志的时间,而是输出到 ES 的时间。插件可以用来转换你的日志记录中的时间字符串,变成 LogStash::Timestamp 对象,然后转存到 @timestamp 字段里。一个良好的日志格式可以确保日志信息易于阅读、解析和分析,便于在日志分析和故障排查中发挥作用。仔细查看可知,输出的日志信息与预期一致,并且我们日志打印时间也和实际的时间一致。
2024-05-18 19:04:45
1785
3
原创 ELK 日志监控平台(一)- 快速搭建
ELK(Elasticsearch, Logstash, Kibana)是一个目前主流的开源日志监控平台。Elasticsearch:是一个开源的分布式搜索和分析引擎,可以用于全文检索、结构化检索和分析,它构建在Lucene搜索引擎库之上,是当前使用较为广泛的开源搜索引擎之一。Logstash:一个用于收集、处理和转发日志数据的数据处理管道。
2024-05-18 19:03:28
12559
原创 支付超时取消订单实现方案 - 定时任务、延迟队列、消息队列等
在实际业务场景中,我们经常会碰到类似一下场景:+ 淘宝等购物平台在订单支付时,如果30分钟内未支付自动取消。+ 腾讯会议预约会议后,在会议开始前15分钟提醒。+ 未使用的优惠券有效期结束后,自动将优惠券状态更新为已过期。+ 等等。。。像这种支付超时取消的场景需求,其实有很多种实现方法,比如定时任务轮询、Java中的延时队列、时间轮算法、Redis过期监听等
2024-04-19 10:38:36
2364
原创 RocketMQ安装部署+简单实战开发
此部分不做赘述,可从官网查阅说明文档下载地址(建议下载二进制包)安装和启动教程其实官网讲解已经很详细了,所以这里只是详细描述一下启动和停止命令### 启动namesrv, 表示安装好的二进制包中bin目录下的 mqnamesrv 文件地址,使用命令时替换为实际地址即可### 先启动broker 表示安装好的二进制包中bin目录下的 mqbroker 文件地址### -n NameServer地址。
2024-04-13 10:00:00
1902
原创 JVM 方法调用之方法分派
如果某个方法在子类中没有被重写,那子类的虚方法表里面的地址入口和父类相同方法的地址入口是一致的,都指向父类的实现入口。为了程序实现上的方便,具有相同签名的方法,在父类、子类的虚方法表中都应当具有一样的索引序号,这样当类型变换时,仅需要变更查找的方法表,就可以从不同的虚方法表中按索引转换出所需的入口地址。动态分派是执行非常频繁的动作,而且动态分派的方法调用版本需要运行时在接收者类型的方法元数据中搜索合适的目标方法,因此,JVM 实现基于执行性能的考虑,真正运行时一般不会如此频繁地去反复搜索类型元数据。
2024-04-11 19:00:00
1051
原创 JVM指令:方法调用之解析调用
首先要清楚的是,在Java中,有关字节码文件的编译过程不包含传统程序语言编译的连接步骤,一切方法调用在字节码文件中只是符号引用,而不是在方法在实际运行时内存布局中的入口地址,也就是直接引用。在上一篇文章《探索JVM类加载机制》中,分析了在类加载的解析阶段,会将一部分的符号引用转化为直接引用,这种解析能够成立的前提条件就是:方法在程序真正运行之前就有一个可以确定的调用版本,并且这个方法的调用版本在运行期间是不可变的,也就是该方法调用具有唯一的目标方法。
2024-04-09 22:53:13
1109
原创 探索JVM类加载机制
Why?其实,网络上已经有许多有关JVM的干货分享,而且也有许多优质的书籍,例如周志明大佬的《深入理解Java虚拟机》,还有官方发版的《JAVA虚拟机规范》等。但是鄙人每次温故或者解惑的时候,也不会随时随地都有书籍在旁,经常上网查询,而且内容良莠不齐,定位到满足需求文章也浪费时间。所以鄙人就向对技术知识进行具有个人需求特色的归档,同时也温习一下阅读过的优质干货和书籍。以下内容都是基于《深入理解Java虚拟机》和 Oracle的官方文档所总结。
2024-04-09 10:00:00
1327
1
原创 ZooKeeper 实战(五) Curator实现分布式锁
分布式锁是一种用于实现分布式系统中的同步机制的技术。它允许在多个进程或线程之间实现互斥访问共享资源,以避免并发访问时的数据不一致问题。分布式锁的主要目的是在分布式系统中提供类似于全局锁的效果,以确保在任何时刻只有一个进程或线程可以访问特定的资源。zookeeper基于临时有序节点实现分布式锁。每个客户端对某个临界资源加锁时,在zookeeper上的与该临界资源对应的指定节点的目录下,生成一个唯一的临时有序节点。判断是否获取锁的方式很简单,只需要判断临时有序节点中序号最小的那个是否由自身创建。
2024-01-16 16:29:21
1279
1
原创 ZooKeeper 实战(四) Curator Watch事件监听
Curator 中提供了三种 Cache(Watcher)来监听不同节点变化类型:+ NodeCache:监听指定的节点。+ PathChildrenCache:监听指定节点的子节点。+ TreeCache:监听指定节点及其子孙节点。
2024-01-12 15:46:31
1765
1
原创 ZooKeeper 实战(三) SpringBoot整合Curator-开发使用篇
Curator是Apache软件基金会下的一个开源框架,目前是Apache下的顶级项目。Curator起初是 Netflix公司开源的一套ZooKeeper客户端框架,后捐献给Apache。和 ZkClient一样,它解决了非常底层的细节开发工作,包括连接、重连、反复注册Watcher的问题以及 NodeExistsException异常等。现在客户端已经配置好了,启动CuratorDemoApplication.class,观察一下是否能够正常启动。观察输出日志,显示如下信息表示客户端连接成功。
2024-01-11 17:10:45
2724
原创 ZooKeeper 实战(二) 命令行操作篇
ZooKeeper允许用户在指定Znode注册 Watcher(绑定监听事件),当特定事件触发时(节点数据变更、节点删除、子节点状态变更等事件),ZooKeeper服务端会将事件通知到注册过该事件Watcher的客户端,该机制是ZooKeeper实现分布式协调服务的重要特性,通过这个事件机制,可以基于ZooKeeper实现分布式锁、集群管理等功能。id表示 用户名:密码。如下所示,是整个acl表达式的形式,除去验证模式和权限控制剩下的,也就是中间内容表示id。:监听节点数据变化,子节点的数据变化不会触发。
2024-01-08 23:25:10
2169
2
原创 ZooKeeper 实战(一) 超详细的单机与集群部署教程(MacOS)
ZooKeeper是一个提供包括配置维护、域名服务、分布式同步、组服务等功能的集中式服务。主要功能如下:分布式锁:Zookeeper可以帮助开发人员实现分布式锁,用于控制多个节点的并发访问。通过Zookeeper的原子广播和顺序一致性特性,可以实现高效且可靠的分布式锁。配置管理:在分布式系统中,节点的配置信息可能需要动态地更改和共享。Zookeeper提供了一个简单而可靠的方式来实现配置的管理,开发人员可以将配置信息存储在Znode中,当配置发生变化时,Zookeeper会及时通知相关的节点。
2024-01-05 16:07:32
1782
1
原创 DBeaver安装与使用教程(MacOS)
DBeaver 是一个通用的数据库管理工具和客户端,几乎支持所有主流的数据库(MySQL, MariaDB, PostgreSQL, SQLite, Clickhouse等)。DBeaver需要JDK1.8以上的环境,使用DBeaver之前电脑需配置好JDK环境。
2024-01-03 12:43:06
10356
1
原创 分布式定时任务(三) Elastic Job 高级使用篇
由于上一篇有关实践的博客更受读者欢迎,本篇将继续分享更多关于 Elastic Job 的一些相对高级用法,以便读者追求更丰富、强大的使用需求。实现JobShardingStrategy接口并实现sharding方法,接口方法参数为作业服务器IP列表和分片策略选项,分片策略选项包括作业名称,分片总数以及分片序列号和个性化参数对照表,可以根据需求定制化自己的分片策略。
2024-01-02 16:36:41
1045
1
原创 分布式定时任务(二) Elastic Job 开发使用篇(结合Spring Boot开发分布式任务调度)
在上一篇中我们已经学会了部署ElasticJob,本文将以上一篇部署的项目为基础,讲解有关定时任务作业开发的代码实战。⚠️ 以下所有案例在测试定时任务之前,请先启动ZK。在进行开发之前,需要读者掌握 Ideal 同一项目启动多个实例的能力。首先点击启动类下拉框,选择 Edit Configurations…选择ElasticJobApplicaiton启动类,点击左上角的复制按钮在新增的启动配置中,添加启动参数(设置端口号为9932)
2023-12-27 12:06:55
1343
1
原创 分布式定时任务(一) Elastic Job 开发部署实战(结合Spring Boot开发分布式任务调度)
elastic-job是当当网基于Zookepper 、Quartz开源的一个java分布式定时任务,解决了Quartz不支持分布式的弊端.elastic-job由两个相互独立子项目Elastic-Job-Lite 、 Elastic-Job-Cloud组成.Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供最轻量级的分布式任务的协调服务,外部依赖仅Zookeeper
2023-12-18 15:08:34
1715
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人