JobService.java

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

  2. import edu.ucsb.cs156.happiercows.entities.jobs.Job;
  3. import edu.ucsb.cs156.happiercows.repositories.jobs.JobsRepository;
  4. import edu.ucsb.cs156.happiercows.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
  12.   private JobsRepository jobsRepository;

  13.   @Autowired
  14.   private CurrentUserService currentUserService;

  15.   @Lazy
  16.   @Autowired
  17.   private JobService self;

  18.   public Job runAsJob(JobContextConsumer jobFunction) {
  19.     Job job = Job.builder()
  20.       .createdBy(currentUserService.getUser())
  21.       .status("running")
  22.       .build();

  23.     jobsRepository.save(job);
  24.     self.runJobAsync(job, jobFunction);
  25.     return job;
  26.   }

  27.   @Async
  28.   public void runJobAsync(Job job, JobContextConsumer jobFunction) {
  29.     JobContext context = new JobContext(jobsRepository, job);

  30.     try {
  31.       jobFunction.accept(context);
  32.     } catch (Exception e) {
  33.       e.printStackTrace();
  34.       job.setStatus("error");
  35.       context.log(e.getMessage());
  36.       return;
  37.     }

  38.     job.setStatus("complete");
  39.     jobsRepository.save(job);
  40.   }
  41. }