如何 运行 Spring 以与 spring.batch.job.enabled=true 相同的方式进行批处理
How to run Spring Batch the same way like spring.batch.job.enabled=true
我正在学习 spring 批处理,并遵循来自
https://spring.io/guides/gs/batch-processing/
我认为要阻止 spring 批处理在启动应用程序时自动启动,我必须设置 spring.batch.job.enabled=false
我的问题是如何手动触发它?在控制台中按下 return 键后,我尝试了以下触发作业但它不起作用(它使用 spring.batch.job.enabled=true 并且没有 JobLauncherController class)
@SpringBootApplication
public class BatchProcessingApplication {
public static void main(String[] args) throws Exception
{
SpringApplication.run(BatchProcessingApplication.class, args);
new Scanner(System.in).nextLine();
new JobLauncherController().launchJob();
}
}
@Controller
public class JobLauncherController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job importUserJob;
public void launchJob() throws Exception{
JobParameters parameters = new JobParametersBuilder()
.addLong("run.id", new Date().getTime()).toJobParameters();
jobLauncher.run(importUserJob, parameters);
}
使 JobLauncherController 成为 Rest 控制器
@RestController
@RequestMapping("/launch/job")
public class JobLauncherController {
并通过 Get 映射使您的方法成为 Get 端点。你可以通过邮递员测试它,方法是 运行 在你 运行 你的 spring 批处理应用程序启动后,使用 http://localhost:8080/launch/job GET Rest 端点。您肯定必须配置 @scheduler
或由人或其他应用程序触发的休息端点,以适当地 运行 spring 批处理。在你的情况下,因为你提到你想要手动 运行 它,通常使用休息端点来触发批处理作业。希望这有帮助。
@GetMapping
public void launchJob() throws Exception{
当您使用 new JobLauncherController()
时,您是在自己创建对象,而不是从 Spring 应用程序上下文中获取 bean。因此,依赖注入不适用于您的对象,并且不会注入协作者。如果你想手动 运行 作业,你可以绕过控制器,像这样:
@SpringBootApplication
public class BatchProcessingApplication {
public static void main(String[] args) throws Exception {
new Scanner(System.in).nextLine();
ApplicationContext context = SpringApplication.run(BatchProcessingApplication.class, args);
Job job = context.getBean(Job.class);
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
JobParameters parameters = new JobParametersBuilder()
.addLong("run.id", new Date().getTime())
.toJobParameters();
jobLauncher.run(job, parameters);
}
}
我正在学习 spring 批处理,并遵循来自 https://spring.io/guides/gs/batch-processing/
我认为要阻止 spring 批处理在启动应用程序时自动启动,我必须设置 spring.batch.job.enabled=false
我的问题是如何手动触发它?在控制台中按下 return 键后,我尝试了以下触发作业但它不起作用(它使用 spring.batch.job.enabled=true 并且没有 JobLauncherController class)
@SpringBootApplication
public class BatchProcessingApplication {
public static void main(String[] args) throws Exception
{
SpringApplication.run(BatchProcessingApplication.class, args);
new Scanner(System.in).nextLine();
new JobLauncherController().launchJob();
}
}
@Controller
public class JobLauncherController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job importUserJob;
public void launchJob() throws Exception{
JobParameters parameters = new JobParametersBuilder()
.addLong("run.id", new Date().getTime()).toJobParameters();
jobLauncher.run(importUserJob, parameters);
}
使 JobLauncherController 成为 Rest 控制器
@RestController
@RequestMapping("/launch/job")
public class JobLauncherController {
并通过 Get 映射使您的方法成为 Get 端点。你可以通过邮递员测试它,方法是 运行 在你 运行 你的 spring 批处理应用程序启动后,使用 http://localhost:8080/launch/job GET Rest 端点。您肯定必须配置 @scheduler
或由人或其他应用程序触发的休息端点,以适当地 运行 spring 批处理。在你的情况下,因为你提到你想要手动 运行 它,通常使用休息端点来触发批处理作业。希望这有帮助。
@GetMapping
public void launchJob() throws Exception{
当您使用 new JobLauncherController()
时,您是在自己创建对象,而不是从 Spring 应用程序上下文中获取 bean。因此,依赖注入不适用于您的对象,并且不会注入协作者。如果你想手动 运行 作业,你可以绕过控制器,像这样:
@SpringBootApplication
public class BatchProcessingApplication {
public static void main(String[] args) throws Exception {
new Scanner(System.in).nextLine();
ApplicationContext context = SpringApplication.run(BatchProcessingApplication.class, args);
Job job = context.getBean(Job.class);
JobLauncher jobLauncher = context.getBean(JobLauncher.class);
JobParameters parameters = new JobParametersBuilder()
.addLong("run.id", new Date().getTime())
.toJobParameters();
jobLauncher.run(job, parameters);
}
}