JobService.java

  1. package edu.ucsb.cs156.courses.services.jobs;

  2. import edu.ucsb.cs156.courses.entities.Job;
  3. import edu.ucsb.cs156.courses.repositories.JobsRepository;
  4. import edu.ucsb.cs156.courses.services.CurrentUserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.context.annotation.Lazy;
  7. import org.springframework.scheduling.annotation.Async;
  8. import org.springframework.stereotype.Service;

  9. @Service
  10. public class JobService {
  11.   @Autowired private JobsRepository jobsRepository;

  12.   @Autowired private CurrentUserService currentUserService;

  13.   @Lazy @Autowired private JobService self;

  14.   public Job runAsJob(JobContextConsumer jobFunction) {
  15.     Job job = Job.builder().createdBy(currentUserService.getUser()).status("running").build();

  16.     jobsRepository.save(job);
  17.     self.runJobAsync(job, jobFunction);

  18.     return job;
  19.   }

  20.   @Async
  21.   public void runJobAsync(Job job, JobContextConsumer jobFunction) {
  22.     JobContext context = new JobContext(jobsRepository, job);

  23.     try {
  24.       jobFunction.accept(context);
  25.     } catch (Exception e) {
  26.       job.setStatus("error");
  27.       context.log(e.getMessage());
  28.       return;
  29.     }

  30.     job.setStatus("complete");
  31.     jobsRepository.save(job);
  32.   }
  33. }