【发布时间】:2019-10-05 23:48:32
【问题描述】:
我编写了一个自定义项目阅读器,它需要从休息端点动态接受资源。 它从字节码中读取文件。
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;
}
}
在我最近查看的许多示例中,配置中注入的资源是静态的,但在我的情况下,我必须将其注入到我的控制器上。
为了做到这一点,我将阅读器注入控制器,并将资源注入此阅读器。
这是我启动这个 bean 的配置;
@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();
}
}
它有效,但我不知道这是正确的方法吗? 最好的方法是什么?
【问题讨论】:
-
我投票结束这个问题,因为这是一个关于代码审查的问题,应该在Code Review
-
@Jens 好的,我不知道这种问题应该在codereview.stackexchange.com 提问。我会在那里问。谢谢。
标签: spring spring-boot spring-batch