我可以将 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
祝你好运
[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
祝你好运