spring statemachine持久化
您不能通过使用普通的java序列化来持久化,因为对象图太丰富,并且包含太多对其他Spring上下文类的依赖关系。 是状态机的运行时表示形式,可用于将现有计算机还原到由特定对象表示的状态。
spring官方表示不用直接用序列化方法来实现状态机的持久化。之前我是将statemachine存入一个hashmap中,但只能存在内存当中,docker容器重新部署之后,之前的数据就丢失了。为此,通过spring提供的持久化方法存入到redis当中。持久化内容StateMachineContext
非StateMachine
,只是持久化当前状态快照,恢复状态,不要求同一状态机。
StateMachineContext
是状态机的运行时表示形式(存储状态机当前状态的快照,可以从中获取StateMachine
),可用StateMachineContext
对象将状态机还原到特定的状态 。
-
首先,生成一个StateMachinePersist,这里是通过RedisConnectionFactory生成RepositoryStateMachinePersist,然后再包装输出StateMachinePersister,这里是RedisStateMachinePersister。
@Configuration public class PersistConfig { @Autowired private RedisConnectionFactory redisConnectionFactory; /** * 注入RedisStateMachinePersister对象 * * @return */ @Bean(name = "RedisPersister") public RedisStateMachinePersister<SessionStatus, SessionEvent> redisPersister() { return new<