Java 如何为Spring引导应用程序执行命令行任务,比如Rake任务?
如何从命令行为长时间运行的作业(如SpringBoot中Jenkins的报告)运行任务?我正在寻找类似RubyonRails的Rake任务。Rake任务在与web服务器相同的应用程序上下文中从命令行执行代码,以便您可以重用代码Java 如何为Spring引导应用程序执行命令行任务,比如Rake任务?,java,spring,spring-boot,Java,Spring,Spring Boot,如何从命令行为长时间运行的作业(如SpringBoot中Jenkins的报告)运行任务?我正在寻找类似RubyonRails的Rake任务。Rake任务在与web服务器相同的应用程序上下文中从命令行执行代码,以便您可以重用代码 我发现了,但听起来更像 我发现,但它说它们都在web服务器启动之前运行,所以我不能运行它或只运行一个任务 我发现这听起来很完美,但我的应用程序负载均衡,有很多实例,所以我不希望它一次运行多次 我有一个报告,其中查询需要30多秒才能运行,并生成一个CSV文件,我想通过邮
- 我发现了,但听起来更像李>
- 我发现,但它说它们都在web服务器启动之前运行,所以我不能运行它或只运行一个任务李>
- 我发现这听起来很完美,但我的应用程序负载均衡,有很多实例,所以我不希望它一次运行多次李>
我有一个报告,其中查询需要30多秒才能运行,并生成一个CSV文件,我想通过邮件发送。我希望它每周自动运行与克朗或詹金斯 我最近遇到了一个类似的问题,我提出了以下三种可能的解决方案:
我破解了一个解决方案。欢迎提出建议
package com.example.tasks;
@Component
public class WeeklyReport implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
Arrays.asList(args).stream().forEach(a -> System.out.println(a));
if (!(args.length > 0 && args[0].equals("-task report:weekly"))) return;
System.out.println("weekly report");
System.exit(0);
}
并通过一个“cron”作业运行它
$ mvn spring-boot:run -Drun.arguments="-task report:weekly"
2)如果没有其他实例使用相同的代码运行计划任务,单个实例如何运行计划任务?3) 报告所用时间超出负载平衡器允许的时间。HTTP请求限制为10秒,报告大约需要一分钟。它在管理界面中已经有一个链接,用于生成报告,该报告在开发过程中有效,但在生产过程中超时。2)如果可以,您需要将原始服务的这一部分重构为新的服务,就像它只使用数据库而不需要服务的其余部分一样。或者将其复制到新服务(听起来很糟糕,我不同意)3)由于所有内容都保留在原始服务中,您只需将接受的消息发送回调度程序服务,并继续处理主服务中的所有其他内容。调度器不需要知道可能的故障,因为它可以在主服务中处理(通知、日志记录、失效等)