目前Spring状态机通过StateMachinePersister接口的实现,完成状态机状态的存储
目前已经提供的存储方式包含Redis,mongoDB,Jpa三种实现,分别对应JpaStateMachineRuntimePersister,RedisStateMachineRuntimePersister 和MongoDbStateMachineRuntimePersister
其中StateContext序列化的方式为kryo,序列化和反序列化都在实现类中自行实现了

基于redis的实例化工具使用

/* 实例化工具配置部分代码,在StateMachine配置类中 */

// 初始化redis连接工厂
@Bean
public RedisConnectionFactory redisConnectionFactory() {
    RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
    redisConfig.setHostName("1.1.1.1");
    redisConfig.setPassword(RedisPassword.of("xxxx"));
    redisConfig.setPort(6379);
    return new JedisConnectionFactory(redisConfig);
// 通过名称进行区分(带有不同枚举导致不能混用)
@Bean(name = "newStateMachinePersister")
public RedisStateMachinePersister<NewStates, NewEvents> redisStateMachinePersister(RedisConnectionFactory connectionFactory) {
    RedisStateMachineContextRepository<NewStates, NewEvents> repository = new RedisStateMachineContextRepository<>(connectionFactory);
    return new RedisStateMachinePersister<>(new RepositoryStateMachinePersist<>(repository));

/* 实例化在项目中的实际引用 */

//状态数据实例化组件
@Resource(name = "newStateMachinePersister")
private StateMachinePersister<NewStates, NewEvents, String> newStateMachinePersister;
// 状态机状态的恢复
newStateMachinePersister.restore(newStateMachine, STATE_MACHINE_PREFIX + id);
// 状态机状态的存储
newStateMachinePersister.persist(newStateMachine, STATE_MACHINE_PREFIX + id);

文章仅作为个人学习整理

实际企业应用中状态机流程会更加复杂,而我们最常用到就是choice。它类似于javaif语句,作为条件判断分支而存在,让我们先看一张图: 这张图表现是一个表单(form)整个状态流程: 创建初始空白表单( BLANK_FORM) 填写(WRITE)表单,成为填充完表单(FULL_FORM) 检查(CHEKC)表单 如果是表单名(formName)不为null,表单成为待提交表... 浏览器打开 Spring Statemachine是应用程序开发人员在Spring应用程序中使用状态机概念框架 Spring Statemachine旨在提供以下功能: 1. 易于使... 浏览器打开 持久化到内存hashmap中 实现StateMachinePersist接口,并通过实现write和read方法,然后构造DefaultStateMachinePersister bean FSMStateMachinePersist 实现接口 StateMachinePersist package com.wtx.springboot2.statemachine; import org.springframework.statemachine.StateMachineContext; impor 浏览器打开 在实际业务中,状态机可能需要在某个环节停留,等待其他业务触发,然后再继续下面流程。比如订单,可能在支付环节需要等待一个剁手用户隔天再下单,所以这里面涉及到一个创建状态机该何去何从问题。在spring statemachine中,给出来办法就是保存起来,到需要时候取出来用。 持久化到本地内存 首先要实现StateMachinePersist接口,这个接口非常简单,就是write和rea... 浏览器打开 Spring Statemachine 简介 Spring StatemachineSpring官方提供一个框架,供应用程序开发人员在Spring应用程序中使用状态机。支持状态嵌套(substate),状态并行(parallel,fork,join)、子状态机等等。 官网地址:https://projects.spring.io/spring-statemachine/ 本文使用版本:2.2.0.RELEASE Spring Statemachine 项目模块 Spring Statemachine是应用程序开发人员在Spring应用程序中使用状态机概念框架。 Spring Statemachine旨在提供以下功能: 易于使用扁平单级状态机,用于简单使用... 浏览器打开 概要:Spring Statemachine 状态机之所以强大,是因为始终保证行为是一致,这使得调试相对容易。这是因为在机器启动时,操作规则是不可更改。其思想是,应用程序可能存在有限数量状态,某些预定义触发器可以将应用程序从一种状态转移到另一种状态。这样触发器可以基于事件或计时器。 在应用程序之外定义高级逻辑,然后依靠状态机来管理状态要容易得多。您可以通过发送事件、侦听更改或请求当前状态来与状态机交互。 官网地址:https://projects.spring.io/spring-statemac 浏览器打开 Recipes # Persist PersistStateMachineHandler + PersistStateChangeListener PersistStateMachineHandler不是县城安全,不适合 multi user environment 根据PersistStateMachineHandler实现,所有业务逻辑,包括状态持久花都应该写道PersistSt... 浏览器打开 什么是状态机 在某个起始状态下,当满足某个条件时,将状态转换到另一个状态机制。状态机就是实现这一机制控制元件。状态机概念也经常出现在电气元件中。 而在软件开发中,状态机是一种在某个状态下,由某个事件触发,并将状态转移到目标状态一个模块。 为什么要使用状态机 状态机解决痛点在于,当某个业务流程很长,且很复杂时,对于状态流转维护成本将膨胀到不可接受程度。而将状态流转从业务代码中剥离出来,让开发过程中更加专注于业务处理,就成为了项目急需解决问题。 状态机引入,让程序开发不再需要关注复杂繁 浏览器打开 推荐渐进式解析 Redis 源码 - 哨兵 sentinel 上面比较全面,我这也是参考上面。 文章目录sentinelFailoverStateMachine(故障转移主流程)sentinelFailoverWaitStart(第一步故障转移开始)sentinelFailoverSelectSlave(第二步,选择晋升服务器节点函数)sentinelSelectSlave(选举一个sentinel来主导故障转移)sentinelFailoverSendSlaveOfNoOne(第三步发送 sl. 浏览器打开 有限状态机(Finite-state machine) 有限状态机(英语:finite-state machine,缩写:FSM),简称状态机,是表示有限个状态以及在这些状态之间转移和动作等行为数学模型。应用FSM模型可以帮助对象生命周期状态顺序以及导致状态事件进行管理。将状态和事件控制从不同业务Service方法if else中抽离出来。FSM应用范围很广,对于有复杂状态流,... 浏览器打开 1.1 状态机定义 有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间转移和动作等行为数学模型。 有限状态机体现了两点:首先是离散,然后是有限State状态这个词有些难以定义,状态存储关于过去信息,就是说它反映从系统开始到现在时刻输入变。 Actions 浏览器打开 前面我们讨论过FSM,一种专门为维护内部状态而设计Actor,它特点是一套特殊DSL能很方便地进行状态转换。FSM状态转换模式特别适合对应现实中业务流程,因为它那套DSL可以更形象描述业务功能。为了实现FSM可用性,就必须为FSM再增加自我修复能力,PersistentFSM是FSM和PersistentActor合并,是在状态机器模式基础上再增加了状态转变事件持... 浏览器打开 以下是Spring Statemachine官方文档定义。Spring Statemachine(SSM)是一个框架,它允许应用程序开发人员在Spring应用程序中使用传统状态机概念。SSM提供以下功能: 易于使用平面(一级)状态机,用于简单用例。 分层状态机结构,以简复杂状态配置。 状态机区域提供更复杂状态配置。 触发器、转换、保护和操作使用。 类型安全配... 浏览器打开