飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

使用 JobRunr 和 Spring Boot 自动执行长时间运行的例行任务

时间:2023-06-15  作者:电脑狂魔  

今天我将解释一种部署、管理和监控长时间运行的后台任务的简单方法,尤其是ETL系统。对于已部署的 ETL 工具,每位大数据工程师都会提出的常见问题包括工具的性能、导致处理管道中断的原因、链接多个作业的难易程度等等。 

JobRunr可以轻松安排后台长时间运行的任务。它是一个分布式 Java 后台作业调度程序,具有许多令人兴奋的功能,如计划和延迟作业、即发即弃作业、重复作业、排队作业和批处理以及作业链。请注意,其中一些功能仅在专业版中可用。但是,JobRunr 的大部分功能都是完全开源的。该库还提供了一个很好的界面来管理和监控您的所有作业。我发现这真的很吸引人,因为最终用户可以将这种视觉效果用于其他有用的目的;例如,从 UI 中,可以手动触发重复作业,它提供有关下一个作业预计何时运行的报告,

接下来,让我们深入研究将 JobRunr 集成到我们的 Java 应用程序中:

使用的技术:

  • 弹簧靴

  • JobRunr

  • 杰克逊

  • Java 11

从创建示例 Spring Boot 应用程序开始;我建议使用Spring Initializr进行快速设置。

将 JobRunr 添加到 Spring Boot 应用程序

将此添加到 pom 文件中的依赖项列表:

 

<dependency>
            <groupId>域名unr</groupId>
            <artifactId>jobrunr-spring-boot-starter</artifactId>
            <version>${域名ion}</version>
        </dependency>
        
        <dependency>
            <groupId>域名域名</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>域名.0</version>
        </dependency>

配置 JobRunr 以使用内存存储。通过向您的项目添加一个 bean 类来完成此操作。

@Configuration
public class StorageProviderConfig {
    @Bean
    public StorageProvider storageProvider(JobMapper jobMapper) {
        InMemoryStorageProvider storageProvider = new InMemoryStorageProvider();
        域名obMapper(jobMapper);
        return storageProvider;
    }
    
}

JobRunr 有一个直观的仪表板,可以轻松监控作业的状态。将以下代码行添加到您的代码中域名erties以激活 UI 仪表板。

域名ground-job-域名led=true
 域名域名led=true

接下来,创建一个简单的服务,其中包含模拟长时间运行的任务的逻辑。

@Service
public class SampleJobService {
    public static final long EXECUTION_TIME = 5000L;
    private Logger logger = 域名ogger(getClass());
    private AtomicInteger count = new AtomicInteger();
    @Job(name = "The sample job with variable %0", retries = 2)
    public void executeSampleJob(String variable) {
        域名("The sample job has begun. The variable you passed is {}", variable);
        try {
            域名p(EXECUTION_TIME);
        } catch (InterruptedException e) {
            域名r("Error while executing sample job", e);
        } finally {
            域名ementAndGet();
            域名("Sample job has finished...");
        }
    }
}

上面的作业在被调用时应该接受一个参数,等待五秒钟,然后打印“Sample job has finished”。它已配置为重试两次(以防失败)。

最后,我们需要安排我们之前创建的作业。将以下代码行添加到您的 Spring Boot 入口类中。

@Autowired
    private JobScheduler jobScheduler;
 @PostConstruct
    public void scheduleRecurrently() {
        jobScheduler.<SampleJobService>scheduleRecurrently(域名y5minutes(), x -> 域名uteSampleJob("a recurring job"));
    }

瞧,我们已成功安排作业每五分钟执行一次。运行应用程序,您应该能够访问端口 8,000 上的 JobRunr 仪表板(JobRunr 的默认端口,您可以根据需要更改此端口)。

JonRunr 仪表板


本文的目的是让您快速开始使用 JobRunr。您可以在此基础上开发更复杂的工作流程;例如,可以使用 JobRunr 顺序链接多个作业。更多信息,请访问JobRunr官网 


湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。