将这个字段值直接注入"studentStepOne",唯一使用它的方法
Inject this field value directly into "studentStepOne", the only method that uses it
我开发了 Spring Boot-Batch 代码和 sonarlint/Sonar-Qube
给我以下错误。我经历了 link,但解决方案并不按照这个 link 理解:https://rules.sonarsource.com/java/tag/spring/RSPEC-3305。
Inject this field value directly into "studentStepOne", the only method that uses it.
代码:
@Configuration
@PropertySource("classpath:application.properties")
public class StudentJob {
@Value( "${spring.chunk.size}")
private String chunkSize;
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private JdbcCursorItemReader<Student> StudentReader;
@Autowired
private ItemProcessor<Student, Student> StudentProcessor;
@Autowired
private StudentWriter StudentWriter;
@Bean
public StudentStepExecuListner StudentStepExecuListner() {
return new StudentStepExecuListner();
}
@Bean("readStudentJob")
@Primary
public Job readStudentJob() {
return jobBuilderFactory.get("readStudentJob")
.incrementer(new RunIdIncrementer())
.start(StudentStepOne())
.build();
}
@Bean
public Step StudentStepOne() {
return stepBuilderFactory.get("StudentStepOne")
.<Student, Student>chunk(Integer.parseInt(chunkSize))
.reader(StudentReader)
.processor(StudentProcessor)
.writer(StudentWriter)
.listener(StudentStepExecuListner())
.build();
}
}
基于link,似乎self-explanatory:
That means using parameter injection instead of field injection for
dependencies that are only used in a single @Bean method.
所以为了你的工作,像这样实例化它:
@Bean("readStudentJob")
@Primary
public Job readStudentJob(Step StudentStepOne) {
return jobBuilderFactory.get("readStudentJob")
.incrementer(new RunIdIncrementer())
.start(StudentStepOne)
.build();
}
无关,但您应该遵循 java 惯例。方法应该使用驼峰命名法。 StudentStepOne()
应该是 studentStepOne()
下面的回答会对你有所帮助。
private StepBuilderFactory stepBuilderFactory;
@Autowired
public void setStepBuilderFactory(StepBuilderFactory stepBuilderFactory) {
this.stepBuilderFactory= stepBuilderFactory;
}
您可以使用 setter 注入来代替字段注入。不推荐字段注入。
我开发了 Spring Boot-Batch 代码和 sonarlint/Sonar-Qube
给我以下错误。我经历了 link,但解决方案并不按照这个 link 理解:https://rules.sonarsource.com/java/tag/spring/RSPEC-3305。
Inject this field value directly into "studentStepOne", the only method that uses it.
代码:
@Configuration
@PropertySource("classpath:application.properties")
public class StudentJob {
@Value( "${spring.chunk.size}")
private String chunkSize;
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private JdbcCursorItemReader<Student> StudentReader;
@Autowired
private ItemProcessor<Student, Student> StudentProcessor;
@Autowired
private StudentWriter StudentWriter;
@Bean
public StudentStepExecuListner StudentStepExecuListner() {
return new StudentStepExecuListner();
}
@Bean("readStudentJob")
@Primary
public Job readStudentJob() {
return jobBuilderFactory.get("readStudentJob")
.incrementer(new RunIdIncrementer())
.start(StudentStepOne())
.build();
}
@Bean
public Step StudentStepOne() {
return stepBuilderFactory.get("StudentStepOne")
.<Student, Student>chunk(Integer.parseInt(chunkSize))
.reader(StudentReader)
.processor(StudentProcessor)
.writer(StudentWriter)
.listener(StudentStepExecuListner())
.build();
}
}
基于link,似乎self-explanatory:
That means using parameter injection instead of field injection for dependencies that are only used in a single @Bean method.
所以为了你的工作,像这样实例化它:
@Bean("readStudentJob")
@Primary
public Job readStudentJob(Step StudentStepOne) {
return jobBuilderFactory.get("readStudentJob")
.incrementer(new RunIdIncrementer())
.start(StudentStepOne)
.build();
}
无关,但您应该遵循 java 惯例。方法应该使用驼峰命名法。 StudentStepOne()
应该是 studentStepOne()
下面的回答会对你有所帮助。
private StepBuilderFactory stepBuilderFactory;
@Autowired
public void setStepBuilderFactory(StepBuilderFactory stepBuilderFactory) {
this.stepBuilderFactory= stepBuilderFactory;
}
您可以使用 setter 注入来代替字段注入。不推荐字段注入。