У меня есть пакетный проект весенней загрузки, который должен работать в Spring Cloud Data Flow
, следовательно, задействован spring-cloud-task
. Он использует два источника данных (один для пакетных таблиц Spring, другой для таблиц данных), поэтому мне нужно настроить TaskConfigurer
для правильного источника данных. В качестве клиента для отдыха использую Feign
. Эта комбинация вызывает зависимость cycli c.
┌─────┐
| dummyService defined in file [/tmp/archetype-test/archetype-test/target/classes/com/batchjobs/adapter/dummyservice/DummyService.class]
↑ ↓
| com.batchjobs.adapter.dummyservice.DummyServiceClient
↑ ↓
| org.springframework.cloud.task.configuration.TaskLifecycleConfiguration
↑ ↓
| org.springframework.cloud.task.configuration.SimpleTaskAutoConfiguration
↑ ↓
| jobConfiguration (field private com.batchjobs.steps.pingdummyservice.DummyServiceItemWriter com.batchjobs.config.JobConfiguration.dummyServiceItemWriter)
↑ ↓
| dummyServiceItemWriter defined in file [/tmp/archetype-test/archetype-test/target/classes/com/batchjobs/steps/pingdummyservice/DummyServiceItemWriter.class]
└─────┘
с
@Slf4j
@Component
public class DummyService {
private final DummyServiceClient dummyServiceClient;
@Autowired
public DummyService(DummyServiceClient dummyServiceClient) {
this.dummyServiceClient = dummyServiceClient;
}
public void ping(String string) {
String result = dummyServiceClient.ping(string);
log.info(result);
}
}
@FeignClient(value = "dummy-service", url = "${dummyservice.url}")
public interface DummyServiceClient {
@PostMapping(value = "/ping", consumes = "application/json", produces = {"application/json", "application/problem+json"})
@ResponseBody
String ping(String ping);
}
@Configuration
@EnableBatchProcessing
@SuppressWarnings("squid:S3305")
public class JobConfiguration {
@Bean
BatchConfigurer batchConfigurer(DataSource dataSource) {
return new DefaultBatchConfigurer(dataSource);
}
@Bean
TaskConfigurer taskConfigurer(DataSource dataSource) {
return new DefaultTaskConfigurer(dataSource);
}
}
@Component
public class DummyServiceItemWriter implements ItemWriter<Some> {
private final DummyService dummyService;
@Autowired
public DummyServiceItemWriter(DummyService dummyService) {
this.dummyService = dummyService;
}
@Override
public void write(List<? extends Some> somes) {
somes.forEach(some -> dummyService.ping("ping"));
}
}
@SpringBootApplication
@EnableTask
@EnableRetry
public class BatchJobApplication {
public static void main(final String[] args) {
SpringApplication.run(BatchJobApplication.class, args);
}
}
У вас есть идеи, как решить эту проблему? Почему для Feign (в DummyServiceClient) требуется TaskLifecycleConfiguration?