<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr-spring-boot-starter</artifactId>
<version>2.4.0</version>
</dependency>
import org.jobrunr.jobs.annotations.Job;
import org.jobrunr.jobs.context.JobContext;
import org.jobrunr.jobs.lambdas.JobLambdaFromStream;
@Job(name = "mySimpleJob")
public class MySimpleJob implements Runnable {
@Override
public void run() {
}
public static void main(String[] args) {
JobRunr.configure()
.useJobActivator(new SimpleJobActivator(null))
.useJobFilters(new AutomaticTypeBasedRegistrationProviderJobFilter())
.useDefaultBackgroundJobServer()
.run();
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@EnableScheduling
public class JobRunrConfig {
@Bean
public JobRunrDashboardWebServer jobRunrDashboardWebServer() {
return new JobRunrDashboardWebServer();
}
@Bean
public BackgroundJobServer backgroundJobServer() {
return new BackgroundJobServer();
}
}
import org.jobrunr.configuration.JobRunr;
import org.jobrunr.jobs.filters.DelayedJobFilter;
import org.jobrunr.scheduling.JobScheduler;
import org.jobrunr.scheduling.cron.Cron;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
@Configuration
public class JobSchedulerConfig implements SchedulingConfigurer {
@Autowired
private JobScheduler jobScheduler;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(() -> jobScheduler.<MySimpleJob>enqueue(mySimpleJob -> mySimpleJob.run(), Cron.minutely()), "*/5 * * * *");
}
}
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr-quartz</artifactId>
<version>2.4.0</version>
</dependency>
import org.jobrunr.dashboard.JobRunrDashboard;
import org.jobrunr.dashboard.server.http.OptionsMethodFilter;
import org.jobrunr.dashboard.server.http.StaticFileFromDiskRoute;
import org.jobrunr.dashboard.server.http.client.HttpClient;
import org.jobrunr.dashboard.server.http.client.OkHttpHttpClient;
import org.jobrunr.quartz.SimpleSchedulerFactory;
import org.jobrunr.quartz.scheduler.DefaultQuartzScheduler;
import org.jobrunr.quartz.scheduler.JobRunrJobFactory;
import org.jobrunr.server.BackgroundJobServer;
import org.jobrunr.scheduling.JobScheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import(ApplicationConfig.class)
public class JobRunrConfig {
@Bean
public JobRunrDashboard requestHandlers() {
JobRunrDashboard dashboard = new JobRunrDashboard();
dashboard.addRoute(new StaticFileFromDiskRoute("/", "static"));
dashboard.addRequestFilter(new OptionsMethodFilter());
dashboard.useHttpClient(getHttpClient());
return dashboard;
}
@Bean
public BackgroundJobServer backgroundJobServer(JobRunrDashboard dashboard, JobScheduler<DefaultQuartzScheduler> jobScheduler) {
return new BackgroundJobServer(jobScheduler, dashboard);
}
@Bean
public JobScheduler<DefaultQuartzScheduler> jobScheduler() throws SchedulerException {
return new JobScheduler<>(getScheduler());
}
@Bean
public org.quartz.Scheduler scheduler() throws SchedulerException {
return SimpleSchedulerFactory.createScheduler();
}
@Bean
public JobRunrJobFactory jobRunrJobFactory() {
return new JobRunrJobFactory();
}
private HttpClient getHttpClient() {
return new OkHttpHttpClient();
}
private org.quartz.Scheduler getScheduler() throws SchedulerException {
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
return schedulerFactory.getScheduler();
}
}
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr-persistence-hibernate</artifactId>
<version>2.4.0</version>
</dependency>
import com.zaxxer.hikari.HikariDataSource;
import org.hibernate.cfg.AvailableSettings;
import org.jobrunr.configuration.JobRunr;
import org.jobrunr.persistence.sql.CommonTableQuartzWrapper;
import org.jobrunr.storage.sql.common.DefaultSqlStorageProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import javax.sql.DataSource;
@Configuration
@EnableScheduling
public class JobRunrConfig {
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setJdbcUrl("jdbc:postgresql://localhost:5432/jobrunr");
dataSource.setUsername("jobrunr");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public JobRunrDatabaseCreator createSchema() {
return new JobRunrDatabaseCreator(getDataSource());
}
@Bean(name = "jobRunrConnectionFactory")
public ConnectionFactory connectionFactory() {
return new org.jobrunr.persistence.sql.common.DefaultConnectionFactory() {
@Override
public Connection getConnection() {
return org.jobrunr.persistence.sql.common.DefaultConnectionFactory.tryOpen(() -> getDataSource().getConnection());
}
@Override
public org.jooq.Configuration configuration() {
DefaultSqlStorageProvider provider = new DefaultSqlStorageProvider(this);
provider.setTableName("JobRunr_jobs");
provider.setJobDetailsClass(CommonTableQuartzWrapper.JobDetails.class);
provider.setJobHistoryClass(CommonTableQuartzWrapper.JobHistory.class);
return provider;
}
};
}
@Bean
public JobRunrHibernateStorageProvider jobStorageProvider(ConnectionFactory connectionFactory) {
return new JobRunrHibernateStorageProvider(connectionFactory);
}
@Bean
public AutomaticTypeBasedRegistrationProviderJobFilter automaticTypeBasedRegistrationProviderJobFilter() {
return new AutomaticTypeBasedRegistrationProviderJobFilter();
}
@Bean
public JobScheduler jobScheduler(ConnectionFactory connectionFactory) {
return JobRunr.configure()
.useJobActivator(new JobActivatorFactory(ApplicationContexts.getApplicationContext()))
.useJobFilters(new AutomaticTypeBasedRegistrationProviderJobFilter())
.useStorageProvider(new JobRunrHibernateStorageProvider(connectionFactory))
.initialize();
}
}