我一直在考虑使用jobrunr在我的springmvc应用程序上启动后台作业,因为我非常喜欢它的简单性,以及将它集成到ioc容器中的方便性。
我正在尝试创建一个简单的测试计划作业,每分钟向配置的记录器写入一行文本,但我正在努力找出如何让jobrunr后台作业服务器检测它并将其排队。我没有使用Spring Boot,所以我只是使用通用的 jobrunr
maven工件而不是“spring boot starter”。我的设置如下:
pom.xml文件
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr</artifactId>
<version>2.0.0</version>
</dependency>
应用程序配置.java
@Bean
public JobMapper jobMapper() {
return new JobMapper(new JacksonJsonMapper());
}
@Bean
@DependsOn("jobMapper")
public StorageProvider storageProvider(JobMapper jobMapper) {
InMemoryStorageProvider storageProvider = new InMemoryStorageProvider();
storageProvider.setJobMapper(jobMapper);
return storageProvider;
}
@Bean
@DependsOn("storageProvider")
public JobScheduler jobScheduler(StorageProvider storageProvider, ApplicationContext applicationContext) {
return JobRunr.configure().useStorageProvider(storageProvider)
.useJobActivator(applicationContext::getBean)
.useDefaultBackgroundJobServer()
.useDashboard()
.useJmxExtensions()
.initialize();
}
backgroundjobscontroller.java文件
@Controller
public class BackgroundJobsController {
private final Logger logger = LoggerFactory.getLogger(getClass());
private @Autowired JobScheduler jobScheduler;
@Job(name = "Test")
public void executeJob() {
BackgroundJob.scheduleRecurrently(Cron.minutely(), () -> logger.debug("It works!"));
jobScheduler.scheduleRecurrently(Cron.minutely(), () -> logger.debug("It works too!"));
}
}
正如你所看到的,我尝试了两种方法来启动后台工作 executeJob
方法。问题基本上是让jobrunr检测到这些作业-这只是一个以某种方式触发 executeJob
应用程序启动时的方法?如果是这样,有人知道最简单的方法吗?以前我用过Spring @Scheduled
注解以自动遍历 Service/Controller
在应用程序启动时初始化,所以我希望有一种简单的方法让jobrunr接收我试图创建的计划任务。如果我忽略了一些愚蠢的事情,我道歉。我花了好几个小时尝试不同的东西和阅读文档!
提前谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!