将此字段值直接注入“studentStepOne”,这是唯一使用它的方法

PAA*_*PAA 3 java spring-batch sonarqube

我开发了Spring Boot-Batch代码并sonarlint/Sonar-Qube给出了以下错误。我浏览了该链接,但根据此链接无法理解解决方案:https : //rules.sonarsource.com/java/tag/spring/RSPEC-3305

将此字段值直接注入“studentStepOne”,这是唯一使用它的方法。

代码:

@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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*der 5

根据链接,它似乎不言自明:

这意味着对仅在单个 @Bean 方法中使用的依赖项使用参数注入而不是字段注入。

所以对于你的工作,像这样实例化它:

  @Bean("readStudentJob")
  @Primary
  public Job readStudentJob(Step StudentStepOne) {
      return jobBuilderFactory.get("readStudentJob")
              .incrementer(new RunIdIncrementer())
              .start(StudentStepOne)
              .build();
  }
Run Code Online (Sandbox Code Playgroud)

无关,但您应该遵循 java 约定。方法应该使用驼峰命名法。StudentStepOne()应该studentStepOne()