Могу ли я изменить конфигурацию Spring Batch для статической работы? - PullRequest
0 голосов
/ 05 августа 2020

[Spring Batch] Когда используется аннотация @Scheduled, она выполняется динамически. Могу ли я изменить его на статический запуск?

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Поскольку вы упомянули @Scheduled, я полагаю, что ваш пакет выполняется из веб-приложения. Если вы хотите запустить его прямо из коробки, вы можете:

  • использовать Spring boot для запуска вашей партии, запустив приложение для весенней загрузки: я советую вам следовать этому руководству и заменить пример партии на ваш собственный: https://spring.io/guides/gs/batch-processing/
  • запускайте свою партию вручную из приложения classi c java, которое создает контекст Spring при запуске (так что весенняя загрузка действительно лучше работает)
  • запустите свою партию в качестве модульного теста (для интеграции): вы можете следовать этому туто (в котором также используется пружинная загрузка): https://www.baeldung.com/spring-batch-testing-job

Хорошо удача

0 голосов
/ 05 августа 2020

Думаю, я неправильно понял ваш вопрос. Если вы хотите запустить метод stati c, есть один способ сделать это. Вы можете сделать компонент StaticJobInitializer следующим образом

@Component
public class StaticJobInitializer {

    private JobRegistry jobRegistry;
    private JobLauncher jobLauncher;

    public StaticJobInitializer(JobRegistry jobRegistry, JobLauncher jobLauncher) {
        this.jobRegistry = jobRegistry;
        this.jobLauncher = jobLauncher;
    }

    @PostConstruct
    public void init() {
        StaticJobRun.setJobRegistry(jobRegistry);
        StaticJobRun.setJobLauncher(jobLauncher);
    }
}
public final class StaticJobRun {
    private static JobRegistry jobRegistry;
    private static JobLauncher jobLauncher;

    public static JobRegistry getJobRegistry() {
        return jobRegistry;
    }

    public static JobLauncher getJobLauncher() {
        return jobLauncher;
    }

    public static void setJobLauncher(JobLauncher jobLauncher) {
        StaticJobRun.jobLauncher = jobLauncher;
    }

    public static void setJobRegistry(JobRegistry jobRegistry) {
        StaticJobRun.jobRegistry = jobRegistry;
    }
}

, и тогда ваш метод начального задания c должен быть таким:

public static void startJob(){
    Job job = StaticJobRun.getJobRegistry().getJob("job_name");
            JobParameters jobParameters = new JobParametersBuilder()
                    .toJobParameters();
            StaticJobRun.getJobLauncher().run(job, new JobParameters());
}
...