当前位置: 首页 > 知识库问答 >
问题:

在spring状态机中处理来自entry action类的代码/配置错误

宦飞
2023-03-14
Builder<String, String> builder = StateMachineBuilder
                .<String, String> builder();
        builder.configureConfiguration()
        .withConfiguration()
        .autoStartup(false)
        .listener(listener())
                .beanFactory(
                this.applicationContext.getAutowireCapableBeanFactory());
private StateMachineListener<String, String> listener() {
        return new StateMachineListenerAdapter<String, String>() {
            @Override
            public void stateChanged(
                    org.springframework.statemachine.state.State<String, String> from,
                    org.springframework.statemachine.state.State<String, String> to) {
                LOGGER.debug("State change to " + to.getId());
            }

            @Override
            public void stateMachineError(
                    StateMachine<String, String> stateMachine, Exception e) {
                e.printStackTrace();
                LOGGER.debug("Ah... I am not getting executed when exception occurs from entry actions");
                LOGGER.debug("Error occured from  " + stateMachine.getState()
                        + "and the error is" + e.toString());
            }
        };
    }

共有1个答案

艾雪风
2023-03-14

您是正确的,StateMachineError或用@onstateMachineError注释的方法都不会在错误时执行。这在1.2版中得到了解决,它现在处于里程碑1。他们引入了erroraction,该操作在状态机上下文中执行:

用户总是可以手动捕获异常,但是对于为转换定义的操作,可以定义错误操作,如果引发异常,则调用错误操作。则从传递给该操作的StateContext中可以使用异常。

在状态机配置类中定义转换时,只需指定一个错误操作和所需的操作。来自文档中的示例:

public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
        throws Exception {
    transitions
        .withExternal()
            .source(States.S1)
            .target(States.S2)
            .event(Events.E1)
            .action(action(), errorAction());
}
 类似资料:
  • 当编写器抛出异常时,我希望能够将步骤和作业状态设置为失败。在做了一些调试和检查Spring批处理源代码后,我注意到配置了一个,它认为是一个致命的异常,因此将作业状态设置为FAILED,所以我将代码包装在我的编写器中的一个try-get中,将包装在中,现在作业和步骤状态设置为FAILED,这是我想要的。我不确定这是否是正确的方法,因为我在任何地方都找不到它的文档,的留档也没有提到它。所以,问题是:这

  • 我从服务器得到以下响应:状态代码。没有实际响应(返回的对象等),因此不需要创建POJO类。 所以,我不知道如何在不创建POJO类的情况下处理这个状态代码。有没有任何选项可以使写代码不使用POJO类?

  • 我希望为每个状态代码显示不同的错误消息,例如: < li>400错误请求 < li>403禁止 < li>500内部服务器错误 < li>404未找到 < li>401未授权 如何在新的ASP。NETMVC6应用程序?我可以使用内置的UseErrorHandler方法执行此操作吗? 另外,我注意到,即使使用上述处理程序,输入不存在的URL(例如/this-page-不存在)也会导致来自IIS的丑陋

  • 如何在SpringMVC中实现自定义http错误处理。 例如:我有一个urlhttp://localhost:8080/demo/canvas 它显示我的画布页面,但如果用户错过了网址并键入http://localhost:8080/demo/canva 它显示了Tomcat呈现的HTTP状态404。我希望它是自定义jsp页面。

  • 是否可以在Spring批处理中动态配置作业? 这是我想做的。我创建了几个不同的,如下所示: FlatFileItemReader 我希望能够在创建批处理作业时动态混合和匹配它们。例如,假设我需要一个有2个步骤的作业。第一步包含一个用于预处理的。第二步将有一个,用于使用我的阅读器/写入器进行基于块的数据处理......类似这样的东西: 在XML中,我可以执行以下操作: 但是我如何像上面一样以编程方式