我可以将 Spring 批处理配置静态更改为 运行 吗?

Can I change Spring Batch configuration to run statically?

[Spring批处理]使用@Scheduled注解时,动态执行。我可以将其静态更改为 运行 吗?

我想我误解了你的问题。 如果你想从静态方法 运行 ,有一种方法可以做到这一点。你可以像这样制作 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;
    }
}

而且你的启动作业静态方法应该是这样的:

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

因为你提到了@Scheduled,我想你的批处理是从网络应用程序执行的。如果你想运行开箱即用,你可以:

  • 使用 Spring 引导通过启动 spring 引导应用程序来启动您的批处理:我建议您遵循此教程并用您自己的批处理替换示例:https://spring.io/guides/gs/batch-processing/
  • 从经典的 java 应用程序手动启动批处理,该应用程序在启动时创建 spring 上下文(因此 spring 引导确实做得更好)
  • 将您的批处理作为单元测试启动(用于集成目的):您可以遵循此教程(也使用 spring 启动):https://www.baeldung.com/spring-batch-testing-job

祝你好运