0

我正在模拟组合任务的错误处理行为,failedTask组合任务定义如下所示:

<f1: sampleTask --fail=true --custom-argument=someMessage || f2: sampleTask>

sampleTask班级跑者:

public  class SampleTask implements ApplicationRunner {
    @Autowired
    SampleTaskProperties taskProperties;


    @Override
    public void run(ApplicationArguments p) throws Exception {

        if(taskProperties.isFail()){
            throw  new Exception(taskProperties.getCustomArgument());
        }
    }
}

依赖项:

ext {
    springCloudTaskVersion = '1.2.2.RELEASE'
    springCloudVersion = 'Edgware.RC1'
}
dependencies {

    compile('org.springframework.cloud:spring-cloud-starter-task')
    compile('org.springframework.cloud:spring-cloud-stream-binder-rabbit')
    compile('org.springframework.cloud:spring-cloud-task-stream')
    compile 'org.postgresql:postgresql:42.1.4'
    runtime 'org.springframework.boot:spring-boot-starter-jdbc'
    compile 'org.springframework.boot:spring-boot-starter'

    compileOnly("org.springframework.boot:spring-boot-configuration-processor");

    testCompile('org.springframework.boot:spring-boot-starter-test')
}

问题是结束时间f1不是数据库中的记录器,failedTask状态显示STARTED在仪表板 UI 中,end_time并且failedTask在表failedTask-f1中都是空的。task_executions

以下是f1执行日志:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-11-20 12:09:06.869  WARN 28244 --- [           main] o.s.boot.SpringApplication               : Error handling failed (failed to convert object to Message; nested exception is org.springframework.messaging.MessagingException: At most one parameter (or expression via method-level @Payload) may be mapped to the payload or Message. Found more than one on method [public abstract void org.springframework.cloud.task.listener.TaskExecutionListener.onTaskFailed(org.springframework.cloud.task.repository.TaskExecution,java.lang.Throwable)])
2017-11-20 12:09:06.895 ERROR 28244 --- [           main] o.s.boot.SpringApplication               : Application startup failed

java.lang.IllegalStateException: Failed to execute ApplicationRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:726) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:713) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:703) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:304) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
    at com.philips.asp.flow.task.SampleTaskApplication.main(SampleTaskApplication.java:31) [classes!/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [sample-task-0.1.11-SNAPSHOT.jar:na]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [sample-task-0.1.11-SNAPSHOT.jar:na]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [sample-task-0.1.11-SNAPSHOT.jar:na]
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [sample-task-0.1.11-SNAPSHOT.jar:na]
Caused by: java.lang.Exception: sdfsdf
    at com.philips.asp.flow.task.SampleTaskConfiguration$SampleTask.run(SampleTaskConfiguration.java:53) ~[classes!/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:723) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
    ... 14 common frames omitted

2017-11-20 12:09:06.898  INFO 28244 --- [           main] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2d363fb3: startup date [Mon Nov 20 12:08:54 IST 2017]; root of context hierarchy
2017-11-20 12:09:06.899  INFO 28244 --- [           main] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6a55299e: startup date [Mon Nov 20 12:09:05 IST 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2d363fb3
2017-11-20 12:09:06.915  INFO 28244 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Stopping beans in phase 2147483647
2017-11-20 12:09:06.916  INFO 28244 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Stopping beans in phase 2147482647
2017-11-20 12:09:06.917  INFO 28244 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Stopping beans in phase 0
2017-11-20 12:09:06.917  INFO 28244 --- [           main] ProxyFactoryBean$MethodInvocationGateway : stopped taskEventListener
2017-11-20 12:09:06.917  INFO 28244 --- [           main] ProxyFactoryBean$MethodInvocationGateway : stopped taskEventListener
2017-11-20 12:09:06.917  INFO 28244 --- [           main] ProxyFactoryBean$MethodInvocationGateway : stopped taskEventListener
2017-11-20 12:09:06.917  INFO 28244 --- [           main] o.s.i.gateway.GatewayProxyFactoryBean    : stopped taskEventListener
2017-11-20 12:09:06.918  INFO 28244 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Removing {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2017-11-20 12:09:06.918  INFO 28244 --- [           main] o.s.i.channel.PublishSubscribeChannel    : Channel 'sampleTask:12890.errorChannel' has 0 subscriber(s).
2017-11-20 12:09:06.918  INFO 28244 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : stopped _org.springframework.integration.errorLogger
2017-11-20 12:09:06.918  INFO 28244 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Stopping beans in phase -2147482648
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Unregistering JMX-exposed beans on shutdown
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Unregistering JMX-exposed beans
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Summary on shutdown: task-events
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Summary on shutdown: errorChannel
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Summary on shutdown: nullChannel
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Summary on shutdown: _org.springframework.integration.errorLogger.handler
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2017-11-20 12:09:06.919  INFO 28244 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans
2017-11-20 12:09:06.920  WARN 28244 --- [           main] o.s.b.f.support.DisposableBeanAdapter    : Invocation of destroy method failed on bean with name 'taskLifecycleListener': org.springframework.messaging.converter.MessageConversionException: failed to convert object to Message; nested exception is org.springframework.messaging.MessagingException: At most one parameter (or expression via method-level @Payload) may be mapped to the payload or Message. Found more than one on method [public abstract void org.springframework.cloud.task.listener.TaskExecutionListener.onTaskFailed(org.springframework.cloud.task.repository.TaskExecution,java.lang.Throwable)]
2017-11-20 12:09:06.920  INFO 28244 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'taskScheduler'

如果我删除

compile('org.springframework.cloud:spring-cloud-stream-binder-rabbit)` 
compile('org.springframework.cloud:spring-cloud-task-stream')

依赖项 - 以下警告日志消息消失,一切都按预期工作。

2017-11-20 12:09:06.920 WARN 28244 --- [ main] o.s.b.f.support.DisposableBeanAdapter : Invocation of destroy method failed on bean with name 'taskLifecycleListener': org.springframework.messaging.converter.MessageConversionException: failed to convert object to Message; nested exception is org.springframework.messaging.MessagingException: At most one parameter (or expression via method-level @Payload) may be mapped to the payload or Message. Found more than one on method [public abstract void org.springframework.cloud.task.listener.TaskExecutionListener.onTaskFailed(org.springframework.cloud.task.repository.TaskExecution,java.lang.Throwable)]

请指教。

4

1 回答 1

0

此外,感谢您对问题的详细解释。在研究了您在上述问题中讨论的问题后,它已被确定为与https://github.com/spring-cloud/spring-cloud-task/issues/341相同的问题问题。并已在此 PR 中解决: https ://github.com/spring-cloud/spring-cloud-task/pull/344

于 2017-11-20T22:01:48.053 回答