Я написал программу чтения пользовательских элементов, которая должна динамически принимать ресурс с конечной точки покоя.Он читает файл из байтового кода.
public class CustomItemReader implements ItemReader<File> {
@Setter
private MyResourceModel resource; //simple pojo that includes byte codes and file name;
@Override
public File read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
//converting resource to file;
}
}
во многих примерах, которые я недавно просматривал, ресурс вводится в конфиге, что означает статически, но в моем случае я должен внедрить его на свой контроллер.
Чтобы сделать это, я ввожу свой считыватель в контроллер и внедряю ресурсы этому считывателю.
это конфигурация, в которой я инициирую этот компонент;
@Configuration
public class MyStepConfig {
@Bean("customItemReader")
public CustomItemReader reader() {
CustomItemReader reader = new CustomItemReader();
//reader.setResource(resource); // in many code resource is injected here but i need to inject in endpoint method.
return reader;
}
@Bean("myStep")
public Step step() {
//inject reader to step...
}
}
контроллер находится ниже;
@RestController
public class MyController {
@Qualifier("customItemReader")
private CustomItemReader customItemReader;
@PostMapping("/upload-file")
public ResponseEntity uploadFile(@RequestBody MyResourceModel resource) {
customItemReader.setResource(resource);
//launch job
return ResponseEntity.ok().build();
}
}
Это работает, но я не знаю, это правильный путь?Каков наилучший способ сделать это?