Можно ли вызвать задачу Spring Cloud после другой задачи Cloud из Task Sink? - PullRequest
0 голосов
/ 26 октября 2018

Мы используем метод Task Sink для запуска нескольких задач Spring Cloud.Одна из облачных задач - зависимость от другой.Я пытаюсь вызвать задачу Cloud из метода afterTask другого.Но это не работает.Дайте мне знать, если этот подход возможен или я должен сделать что-то другое.

@SpringBootApplication
@EnableBinding(Sink.class)
@RestController
@EnableScheduling
@EnableTaskLauncher
@Slf4j
public class FileTaskSink {
    @Autowired
    private Sink sink;

    @Value("${spring.task.artifactory.url}")
    private String uri;

    @Value("${spring.task.name:file_task_launcher}")
    private String taskName;

    public static void main(String[] args) {
       SpringApplication.run(FileTaskLauncherApp.class, args);
    }

    @GetMapping("/triggerTask")
    public String publishTask(){
       log.info("Publishing task with task launcher request...");

       Map<String, String> prop = new HashMap<>();
       prop.put("server.port", "0");
           TaskLaunchRequest request = new TaskLaunchRequest(
              uri, null,
              prop,
              null, taskName);
           GenericMessage<TaskLaunchRequest> message = new 
              GenericMessage<TaskLaunchRequest>(
              request);
           this.sink.input().send(message);
           return "SUCCESS";
    }
}

Я настроил прослушиватель задач в следующей задаче, поэтому, как только эта задача будет выполнена, я хотел вызвать задачу Spring Cloud.

  @SpringBootApplication
  @EnableTask
  @EnableTaskLauncher
  @Slf4j
  public class FulfillmentPrintFileGenerationTaskApplication {
      @Autowired
      private DataSource dataSource;

      public class FileGeneratorTaskConfigurer extends DefaultTaskConfigurer {
        public FileGeneratorTaskConfigurer(DataSource dataSource){
            super(dataSource);
        }
      }

      @Bean()
      public FileGeneratorTaskConfigurer getTaskConfigurer() {
        return new FileGeneratorTaskConfigurer(dataSource);
      }

      public static void main(String[] args) {
           SpringApplication.run(FulfillmentPrintFileGenerationTaskApplication.class, args);
      }

      @Component
      public static class FileGeneratorTaskRunner implements ApplicationRunner, TaskExecutionListener {
         @Autowired
         private JobLauncher launcher;
         @Autowired
         private Job job;
         @Autowired
         private ThreadPoolTaskExecutor executor;
         @Value("${fulfillment.client.id}")
         private String clientId;
         @Autowired
         private Sink sink;


            @Override
            public void run(ApplicationArguments args) {

                log.info("Launching  file generation task .. ");

            }

            @Override
            public void onTaskStartup(TaskExecution taskExecution) {
                log.info(“File generation task is starting.");
            }

            @Override
            public void onTaskEnd(TaskExecution taskExecution) {
                if(taskExecution.getExitCode()==0){
                    log.info(“Triggering another task..”);

                    TaskLaunchRequest request = new TaskLaunchRequest(
                       labelfileurl, null,
                       config,
                       null, taskName);
                    GenericMessage<TaskLaunchRequest> message = new 
                    GenericMessage<TaskLaunchRequest>(
                    request);
                    this.sink.input().send(message);
                }
                log.info(“File generation task is completed, shutting 
                down the executor beans..");
                executor.shutdown();
            }

            @Override
            public void onTaskFailed(TaskExecution taskExecution, 
                Throwable throwable) {
                log.warn(“File generation task is failed, shutting 
                down the executor beans..");
                executor.shutdown();
            }
        }
    }

Обратите внимание: я не использую поток данных Spring Cloud для этого, так как я использую приложение приемника задач.Пожалуйста, дайте мне знать, если это возможно.Я не могу успешно выполнить задачу.

...