Class JobsAutoConfiguration

java.lang.Object
edu.ucsb.cs156.jobs.config.JobsAutoConfiguration

@AutoConfiguration @AutoConfigurationPackage(basePackages="edu.ucsb.cs156.jobs") @EnableAsync @EnableScheduling public class JobsAutoConfiguration extends Object
Auto-configuration for the jobs system; activates when the library is on the classpath.

@AutoConfigurationPackage adds edu.ucsb.cs156.jobs to the app's auto-configuration packages, so Spring Boot's default entity and Spring Data repository scanning picks up Job and JobsRepository *in addition to* the app's own classes. (Using @EntityScan/@EnableJpaRepositories here instead would disable that default scanning and break the consuming app's own entities and repositories.)

Every bean is @ConditionalOnMissingBean so an app can override any piece.

The jobsExecutor defaults to a single thread with an unbounded FIFO queue: jobs execute strictly one at a time, in submission order, which prevents two concurrent jobs from racing each other (e.g. double-launching a sync inserting the same rows). Known limitation: the queue is in-memory, so jobs still queued when the app shuts down are lost and their Job rows remain in "running" status. Apps that want concurrency set app.jobs.core-pool-size / app.jobs.max-pool-size / app.jobs.queue-capacity.

  • Constructor Details

    • JobsAutoConfiguration

      public JobsAutoConfiguration()
  • Method Details

    • libJobsContextFactory

      @Bean @ConditionalOnMissingBean public JobContextFactory libJobsContextFactory(JobLogRepository jobLogRepository, org.springframework.transaction.PlatformTransactionManager transactionManager)
    • libJobsService

      @Bean @ConditionalOnMissingBean public JobService libJobsService()
    • libJobsController

      @Bean @ConditionalOnMissingBean public JobsController libJobsController()
    • libJobsRateLimit

      @Bean @ConditionalOnMissingBean public JobRateLimit libJobsRateLimit(@Value("${app.jobs.rate-limit-ms:200}") String rateLimitMsString)
    • jobsExecutor

      @Bean(name="jobsExecutor") @ConditionalOnMissingBean(name="jobsExecutor") public org.springframework.core.task.AsyncTaskExecutor jobsExecutor(@Value("${app.jobs.core-pool-size:1}") int corePoolSize, @Value("${app.jobs.max-pool-size:1}") int maxPoolSize, @Value("${app.jobs.queue-capacity:2147483647}") int queueCapacity)