使用连接工厂时,Spring状态机的超时总是被执行
这次我有一个有关状态机上超时的问题. 我的情况是这样的,指下图像 在输入状态基础时,我在waitfortemplateresult等待工厂给予的机器和机器,直到其中一个事件vas_qry_res或main_qry_res. 现在,还有30秒后发射的超时. 因此,现在发生的事情是即使vas_qry_res或main_qry_res出现,即使超时也是驱动的. 我研究了这个问题,我能够提供的解释是,当我第一次输入态源时,statemachineFactory用UUID分配一台机器,而当vas_qry_res或main_qry_res出现时,我确认了另一台机器,我确认了一台不同的uuid uuid uuid .无论如何,先前机器的超时会发射(使用第一个UUID). 解决方案 我希望这是 gh321 我刚刚推出修复程序.您是否介意尝试最新1.2.3.BUILD-SNAPSHOT查看是否有帮助.
6 2023-09-28
编程技术问答社区
在DefaultStateMachineExecutor中维护的延迟事件列表在春季状态机中丢失了
背景: 在我们的状态机典型工作模型中,我们使用状态机监视弹簧云流微服务进行的弹簧批量处理. 更精确地说,我们创建了流的命名ittemtream,具有源,处理,下沉的微服务部署的流式传输,以批量阅读,处理和写入记录;分别 . 在进行这些活动时,我们打电话给每个呼叫,每个呼叫在流的操作之间由一个事件组成.这些休息调用我们在状态机机器微服务中消耗,并在机器实例上相应地发射这些事件.每次处理完成后,在州机级别上,我们使用JPA/REDIS状态机器persister持续存在状态计算机上下文到持久存储(数据库/REDIS CACE). 当从流中收到新的休息调用时,我们会从持久商店恢复机器上下文,并用它填充一个新的状态机对象.为了准备那个新鲜机器对象,以具有以前存在的机器状态. 注意:此处'填充新的状态机对象'仅意味着我们使用机器工厂呼叫创建每个新实例,因为我们尚未插入机器对象池实现以推动和pop statemachine的对象在需要时,而不是每次创建新的新实例. 问题: 但是,现在
10 2023-09-28
编程技术问答社区
春天的状态机叉子
我现在已经取得了良好的进步.当我想使用叉子时,我最近出现的问题(我正在使用UML).叉子无法使用,因为它是持久的,所以它是因为持久性的.我将我的机器坚持在Redis中.请参阅下图图像. 这是我的顶级机器,其中manage-commands是一个子机器参考,顶部的区域如它. 现在说我在redis中持续了一些状态,从下面的区域开始,下一个在线事件来了,那么机器不接受该事件,显然是因为我已经要求机器使用给定的密钥从redis恢复状态. bur我希望两个区域都坚持下去,以便根据事件选择任何一个区域. 有什么方法可以实现这一目标? 下面是我坚持n还原的方式 private void feedMachine(StateMachine stateMachine, String user, GenericMessage event) throws Exception { stateMachine.sendEv
16 2023-09-28
编程技术问答社区
弹簧子状态机 退出点到父机器
我已经成功实现了一台状态机和一台用户,并从初始计算机开始引用.现在,我陷入了一个无法考虑将出口点链接到它的地方. 给出了指向我的模型的链接. 如果您查看它,我已经引用了" DirectQuery"状态的子机器(在Parent Machine- IMG2中以红色标记). 现在,我在将出口点链接到父母方面有问题.如果有两个出口,我该如何处理两个? 解决方案 好的,目前不支持,但我意识到它实际上是在规格中定义的,纸莎草也有(尽管在属性编辑器中有点隐藏).创建
10 2023-09-28
编程技术问答社区
在Spring Statemachine中坚持和恢复当前状态
我正在将春季史坦马金引入现有项目中,希望与我们的业务逻辑合并并澄清我们的业务逻辑.我们有各种具有互连状态的JPA实体,我在将持久状态设置为现有状态机器的当前状态时遇到了一些麻烦. 我正在使用statemachineFactory为每个实体实例创建一个新的statemachine实例.我正在单独的字段中存储statemachine的当前状态,以使Hibernate持续存在,理想情况下需要将持久字段的值与statemachine同步.我的问题是围绕春季史蒂马辛通常应该如何实现这一点. @Entity @EntityListeners(MyEntityListener.class) public class MyEntity { @Column private MyState internalState; // Using AttributeConverter @Transient private StateMachine
20 2023-09-28
编程技术问答社区
带有JPA持久性的Spring状态机-存储库的使用
我正在尝试弄清楚如何轻松使用春季状态机,包括JPA的持久性. 这是我要处理的问题: 不兼容的数据类型 - 工厂和持久性 在程序中的某个点,我想使用连接到用户的状态计算机.有用于此目的的存储库(项目spring-statemachine-data-jpa). 首先,使用存储库检查了播放器是否已经存在状态计算机.如果没有,创建新的状态机并坚持下去. 问题是我有不同类型的状态机器.工厂创建StateMachine,存储库返回a JpaRepositoryStateMachine.这些彼此不兼容,对我而言,如何坚持/创建/还原状态机. 您能为我澄清一下吗? @Autowired private StateMachineRepository repository; public someMethod(User user) { Optional
0 2023-09-13
编程技术问答社区
使用spring-statemachine和spring cloud slueth时出现BeanNotOfRequiredTypeException
我目前正在使用Spring-Boot开发微服务.我目前在一起使用Spring-State Machine和Spring-Cloud-Sleuth文物时都有问题. @Validated @RestController @SuppressWarnings({"squid:S00112"}) @RequestMapping() public class StatusController { @Autowired private QuoteService quoteService; @Autowired private StateMachine stateMachine; @Autowired private QuoteStateHandler quoteStateHandler; @Value("${StateMachine.InvalidField.me
60 2023-09-13
编程技术问答社区
Spring状态机错误处理不工作
我为错误处理做了所有设置 @PostConstruct public void addStateMachineInterceptor() { stateMachine.getStateMachineAccessor().withRegion().addStateMachineInterceptor(interceptor); stateMachine.getStateMachineAccessor().doWithRegion(errorinterceptor); } 创建的拦截器要处理错误: @Service public class OrderStateMachineFunction implements StateMachineFunction> { @Override public void apply(StateMachineAccess
10 2023-09-12
编程技术问答社区
春季状态机器的息息问请求配置
我有一个简单的订单处理应用程序,并试图将弹簧状态机应用用于处理订单状态. 我想知道如何在REST服务的多个请求中处理订单的同一订单的订单状态. 订单状态: enum OrderEvents { FULFILL, PAY, CANCEL } 订购事件: enum OrderStates { SUBMITTED, PAID, FULFILLED, CANCELLED } 状态计算机配置: @Log @Configuration @EnableStateMachineFactory class SimpleEnumStatemachineConfiguration extends StateMachineConfigurerAdapter { @Override public void configure(StateMachine
2 2023-09-12
编程技术问答社区
同步执行状态行动
我正在使用具有多个区域的春季机器,我配置了某些区域以具有入口和退出. 我最近意识到,在其他线程中运行的操作的回调,有时在状态过渡完成后才完成. 这是何时安排动作的堆栈跟踪: at org.springframework.statemachine.state.AbstractState.entry(AbstractState.java:208) at org.springframework.statemachine.state.ObjectState.entry(ObjectState.java:156) at org.springframework.statemachine.support.AbstractStateMachine.entryToState(AbstractStateMachine.java:1216) at org.springframework.statemachine.support.AbstractStateMac
4 2023-09-11
编程技术问答社区
春天的状态机--从数据库中配置
在我在网上查找的所有示例中,statemachine已静态配置 @Override public void configure(StateMachineTransitionConfigurer transitions) throws Exception { transitions .withExternal() .source(BookStates.AVAILABLE) .target(BookStates.BORROWED) .event(BookEvents.BORROW) .and() .withExternal() .source(BookStates.BORROWED) .target(BookStates.AVAILABLE
10 2023-09-11
编程技术问答社区
如何从运行时建立的上下文中恢复状态机?
我有状态机 @EnableStateMachine @Configuration public class StateMachineConfiguration extends EnumStateMachineConfigurerAdapter { @Override public void configure(StateMachineStateConfigurer states) throws Exception { states.withStates() .initial(Status.DRAFT) .states(EnumSet.allOf(Status.class)); } @Override public void configure(StateMachineTransitionConfigur
8 2023-09-10
编程技术问答社区
使用@OnTransition定义的过渡处理程序在使用新的StateMachineContext对状态机进行补水时停止工作
在以下示例代码中,我创建了一台状态机,并以选择的状态将其补充水分.但是,当我发送事件时,使用@Ontransition定义的处理程序不运行. 如果我对#RehyDrateState进行评论,则处理者适当地工作.为什么会发生? 另外:如果我更换行 var sm = factory.getStateMachine("Machine1"); with var sm = factory.getStateMachine(""); Then all handlers run fine. Why is that the case? @Configuration @EnableStateMachineFactory public class Config extends StateMachineConfigurerAdapter { @Override public void configure(StateMachineStat
2 2023-06-20
编程技术问答社区
无法从行动中触发一个事件
我正在设置春季状态机交易,我想启动Event2 Event1 完成Event2 这些是我拥有的状态 状态 - >"初始","第二","第三" 我已经配置了从first_event的动作发送second_event的交易,如下所示 transitions.withExternal() .source("INITIAL") .target("SECOND") .event("FIRST_EVENT") .action(new Action() { @Override public void execute(StateContext context) { System.out.println("FIRST_ACTION_EXECUTED"); context.getStateMachine().se
18 2022-12-30
编程技术问答社区
如何使用spring状态机获得状态转换时抛出的异常
我试图了解,在状态转换期间操作引发的异常是如何发生的.我已经配置了这个简单的状态机: transitions .withExternal() .source(State.A1) .target(State.A2) .event(Event.E1) .action(executeAnActionThrowingAnException()) 在我的服务类中,我注入了我的状态机并发送此事件 E1: @Service public class MyService() { @Autowired private StateMachine stateMachine; public void executeMyLogic() { stateMachine.start() stateMachine.sendEvent(Event.E1); // how t
1412 2022-08-12
编程技术问答社区
java.lang.IllegalStateException。Bean工厂必须是ListableBeanFactory的实例,是空的。
我正在使用提供的构建器创建一个状态机对象,如下所示: 10.2通过 Builder 的状态机 我看到以下异常: 错误 org.springframework.statemachine.support.StateMachineObjectSupport - 无法初始化注释处理程序java.lang.IllegalStateException:Bean 工厂必须是 ListableBeanFactory 的实例,为空 该异常并未阻止状态机按预期运行.但是,我想深入了解为什么我会看到这个. 任何人都知道如何阻止此异常显示? 谢谢. 解决方案 设法得到解决方案. 我将 Spring 应用程序上下文自动装配到我的类中.然后我从中提取 AutowireCapableBeanFactory 并在构建器中进行设置.如下: @Autowired private ApplicationContext appContext; pri
354 2022-08-12
编程技术问答社区
Spring状态机-将静态数据附加到状态上
使用 spring 状态机,我们有状态和事件.我找不到任何关于是否可以在配置期间将静态数据附加到状态的文档. 例如,如果有状态 S1 和 S2 public void configure(StateMachineStateConfigurer states) throws Exception { states.withStates() .initial("INIT") .end("END") .state("S1", null, exitAction()) .state("S2", entryAction()); } 如果我们可以在上述配置期间附加静态数据(例如 java Map),它可能在触发的操作中很有用(例如上面的 entryAction 和 exitAction) 我不知道是否有可能以某种方式做
254 2022-08-12
编程技术问答社区