hexo + butterfly 搭建记录
认识 hexo简单来说,就是一个博客框架。社区很活跃,里面有很懂框架可以直接使用和自定义。更多详情,直接查看官网: https://hexo.io/zh-cn/docs/index.html 🚀 markdown 语法可以查看 本地搭建 hexo 记录1.git 安装:略2.node.js 安装:版本 22,详情略3.启动终端安装框架:npm install -g hexo-cli4.初始化 hexo 123hexo init <folder>cd <folder>npm install 5.在 hexo 根目录终端输入: hexo server,启动程序,访问 http://localhost:4000/ 不报错即成功。 常用命令1.在终端输入 hexo new page 导航栏名字,如:hexo new page about 配置 github pages注意: 创建github 仓库的时候,必须要一个 README.md,不然会失败。 详情查看官网文档:https://hexo.io/zh-cn/docs/github-pages 进阶 Ne...
设计模式之策略模式
设计模式之策略模式诞生的目的在传统的软件开发中,当需要为一个问题提供多种算法时,开发者往往采用以下两种方式: 在一个类中提供多个方法,每个方法对应一种算法实现 在一个方法中通过 if…else 或 switch 条件语句进行分支选择 这两种方式都属于硬编码,带来的问题非常明显: 维护困难:增加新算法或修改现有算法,都需要修改原有类的源代码 代码臃肿:大量算法堆积在同一个类中,代码变得复杂且难以阅读 违反开闭原则:对扩展不开放,对修改不封闭——每次增加新算法都要修改已有代码 团队协作冲突:多人同时修改同一个庞大的类,容易产生代码冲突 策略模式正是为了解决这些问题而诞生————将算法从使用它的客户类中抽离出来,独立封装,使算法可以独立变化。 核心思想找出应用中可能变化的部分,把它们独立出来,不要和那些不需要变化的代码混在一起。同时,针对接口编程,而不是针对实现编程。 结构策略模式涉及三个核心角色: 角色 说明 抽象策略(Strategy) 定义公共接口,所有具体策略都必须实现此接口 具体策略(Concrete Strategy) 实现抽象策略接口,提供具体的算...
FlowLong工作流引擎
快速入门飞龙流程引擎只有节点这么一个概念,节点分为条件节点、任务节点两种,其中任务节点包含审批任务、定时器任务、触发器任务、子流程任务等。要深入了解飞龙工作流,必须要清楚了解模型、实例、任务的区别,整个框架都在围绕这三个概念执行操作。 相关文档可以查看官方 | 快速入门 模型 流程图(Process Diagram) 活动(Activity) 参与者(Participant) 实例 流程定义 流程状态 执行路径 流程变量 参与者信息 任务 责任人指派 执行条件 执行结果 任务流转 任务通知和提醒 系统通常会提供任务通知和 环境配置 初始化数据库,访问flowlong官方gitee,初始化执行 db/flowlong-mysql.sql 数据库脚本 集成springboot 12345 <dependency> <groupId>com.aizuda</groupId> <artifactId>flowlong-spring-boot-starter</artifactId> <...
Seata分布式事务
seataSeata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。 seata服务器的web界面的端口是7091,而8091是TC协调者的TCP端口 Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成: seata有服务器端和客户端,客户端要连上服务器才能使用。 TC(Transaction Coordinator,事务协调者)在服务器端的官网下载: 全局事务的管理者。用于维护全局和分支事务的状态,驱动TM的全局提交和回滚。TM和RM通过TC注册分支和汇报状态。 TM(Transaction Manager,事务管理器)在客户端:发起全局事务,定义全局事务的范围,操作全局事务的提交和回滚。 RM(Resources Manager,资源管理器)在客户端:操作自己分支的事务提交和回滚。 注意:seata的稳定性非常重要,如果TC崩了,那所有的事务管控都失效。 环境配置参考官方 ...
GateWay
环境配置一般gateway单独自己一个模块: 引入依赖: 1234567891011121314<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.spring...
Sentinel流量控制与熔断降级
环境搭建可以查看文档:官网 | 快速开始 官方提供了UI控制台,以方便我们对系统做限流设置。 下载好后,放在任意非中文目录下,在cmd中执行java -jar sentinel-dashboard-1.8.1.jar,就可以启动了。 访问http://localhost:8080页面,就可以看到sentinel的控制台了:需要输入账号和密码,默认都是:sentinel 基础使用 引入依赖: 12345<!--sentinel--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency> yaml配置文件修改application.yaml文件,添加下面内容: 12345678server: port: 8088 #微服务地址spring: cloud: sentinel: ...
OpenFeign服务间远程调用
基础使用 引入依赖: 12345<!--openfeign--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 启动类加注解 @EnableFeignClients(value = “com.xxx.feign”) 编写FeignClient接口,远程调用方法直接将调用地方的controller方法粘贴过来即可 12345@FeignClient(value = "service-product")public interface ProductFeignClient { @GetMapping(value = "/productId/{id}") public Product getP...
Nacos注册中心于服务发现
nacos-注册/配置中心基础入门官网:nacos 官网 | 快速开始下载:nacos 官网 | 下载服务启动:在bin目录启动cmd,输入startup.cmd -m standalone启动nacos的服务端,访问:http://localhost:8848/nacos,就可以看到nacos的ui界面了,nacos server 账号密码都是nacos。 注册中心将微服务注册到nacos中进行统一管理,首先微服务要引入nacos依赖: 123456<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency></dependencies> 然后服务在自己的properties或yml文件中配置: 123...
JavaWeb之RestFul
参考 https://www.runoob.com/restfulapi/restful-api-tutorial.html
MyBatisPlus核心功能
条件构造器在BaseMapper中,有一些Wrapper参数的方法,这就是复杂一点的where条件查询。复杂的条件查询会用到Wrapper类,以及它的各种子类,我们常用的就是QueryWrapper、UpdateWrapper和LambdaQueryWrapper。 QueryWrapper无论是修改、删除、查询,都可以使用QueryWrapper来构建查询条件。接下来看一些例子:查询:查询出名字中带o的,存款大于等于1000元的人。代码如下: 1234567891011@Testvoid testQueryWrapper() { // 1.构建查询条件 where name like "%o%" AND balance >= 1000 QueryWrapper<User> wrapper = new QueryWrapper<User>() .select("id", "username", "info", "bal...








