Spring State Machine无限循环行动

时间:2019-03-04 13:43:06

标签: java spring spring-statemachine

我的 Spring状态机配置有通过基本的while(true)循环永久执行IO任务的Action。 我正在使用状态机工厂,所以我有多个。 问题是,有什么干净的方法可以保证所有机器的动作都在发生或至少被排队?

我看了https://docs.spring.io/spring-statemachine/docs/1.1.0.RC1/reference/htmlsingle/#statemachine-config-commonsettings中的示例 我制作了一个配置示例,如下所示:

 config.withConfiguration()
            .autoStartup(false)
            .taskExecutor(ThreadPoolTaskExecutor().also {
                it.corePoolSize = 7
                it.initialize()
            })
            .taskScheduler(ConcurrentTaskScheduler(Executors.newScheduledThreadPool(7)))

对于不会永远发生的守卫(绝不会(true));它似乎按预期工作,将警卫执行排队,一旦其中7个执行完毕,接下来的7个正在执行,依此类推,但对于永远执行的操作,只有7个它们将被执行且没有排队,因此基本上仅7个状态机的操作将不再执行。 我该如何预防呢?

我想到了在Action中定义一个Executor服务(带有while(true)),并且确实要手工提交,这会带来一些挑战..但不确定是否有更好的方法来实现这一目标?有什么主意吗?

0 个答案:

没有答案