我想使用弹簧状态机作为我应用程序的主处理器。我想启动应用程序,将bootstrapping作为初始状态的动作,并作为结束状态的动作拆除。在中间,应用程序应该等待事件。
所以,我开始做的如图所示
http://docs.spring.io/spring-statemachine/docs/current/reference/html/developing-your-first-spring-statemachine-application.html
一切都按照描述的方式工作,除了在退出run
方法后整个应用程序停止并且不会监听其他事件。
如何实现这种行为?有蓝图/模板吗?我没找到一个。与侦听请求的Web组件类似,我希望状态机等待已配置的事件。我的应用程序在Raspberry Pi上运行,这些事件由外部操作触发,例如"按下按钮","连接的设备提供测量结果"。
在我的主要问题旁边,我问自己,Spring state mechanine在我的环境中是否正常工作:我使用Pi4J进行硬件交互。此框架通常使用自己的线程来查看硬件事件。如何处理并发事件。动作是否总是在触发事件的线程中同步运行,或者是否有单独的线程池?
谢谢, 史蒂夫
答案 0 :(得分:0)
这是一个正常的春季引导问题,因为如果没有任何东西保持活着,应用就会退出。使用启动应用程序,您通常会有一个Web层,并且来自那里的线程会使应用程序保持活跃状态。
statemachine docs有关于如何配置执行程序进行线程化的更多信息。默认执行发生在同一个线程中。
Pi4J是一个很好的问题,因为我并不熟悉它的线程。我知道许多错误已被修复,因为它曾经创建了许多用户没有控制权的线程,而且它可能仍然是一个案例。在Pi4J上有一些开发允许用户定义线程工厂,理论上它们也可以传递给statemachine使用的Spring TaskExecutor
。