Мы используем метод 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 для этого, так как я использую приложение приемника задач.Пожалуйста, дайте мне знать, если это возможно.Я не могу успешно выполнить задачу.