Spring Boot 如何在实现Jobrunr ApplyStateFilter接口的类中注入依赖项?

8gsdolmq  于 2022-12-18  发布在  Spring
关注(0)|答案(2)|浏览(202)

我正在尝试使用jobrunr实现一个项目。我有一个用例,其中我编写的服务应该在对一个作业完成最大重试次数后被触发。我尝试使用this answer作为参考来实现相同的目的。过滤器逻辑在作业失败后被触发,但我包含的依赖关系(包含我的逻辑)返回一个空点异常(java.lang.NullPointerException:无法调用“com.project.service.ScheduleHistoryService.someFunc()”,因为“this.service”为空)。我可以使用@Autowire在其他组件中注入相同的服务文件。我做错了什么?我使用的是jobrunr版本5.1.4。附件是示例代码的屏幕截图:enter image description here

oxcyiej7

oxcyiej71#

在过滤器中注入服务只能在JobRunr的Pro版本中实现。

t2a7ltrp

t2a7ltrp2#

我的破解方法/解决方案是将服务注入到相关配置中,并将其传递给CustomRetryFilter的构造函数:

@Configuration
public class JobRunrConfig {

    @Bean
    public BackgroundJobServer backgroundJobServer(
        StorageProvider storageProvider, JsonMapper jobRunrJsonMapper, JobActivator jobActivator, BackgroundJobServerConfiguration backgroundJobServerConfiguration, JobRunrProperties properties,
        ApplicationEventPublisher applicationEventPublisher) {

    BackgroundJobServer backgroundJobServer = new BackgroundJobServer(
        storageProvider, jobRunrJsonMapper, jobActivator, backgroundJobServerConfiguration);
    backgroundJobServer.setJobFilters(
        Collections.singletonList(
            new CustomRetryFilter(
                applicationEventPublisher,
                properties.getJobs().getDefaultNumberOfRetries(),
                properties.getJobs().getRetryBackOffTimeSeed())));
    backgroundJobServer.start();
    return backgroundJobServer;
  }
}

相关问题