All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.kagkarlsson.examples.boot.config.ParallellJobConfiguration Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) Gustav Karlsson
 *
 * 

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * *

http://www.apache.org/licenses/LICENSE-2.0 * *

Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package com.github.kagkarlsson.examples.boot.config; import com.github.kagkarlsson.examples.boot.ExampleContext; import com.github.kagkarlsson.scheduler.task.*; import com.github.kagkarlsson.scheduler.task.helper.RecurringTask; import com.github.kagkarlsson.scheduler.task.helper.Tasks; import com.github.kagkarlsson.scheduler.task.schedule.Schedules; import java.time.Instant; import java.util.Random; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionTemplate; import utils.EventLogger; import utils.Utils; @Configuration public class ParallellJobConfiguration { public static final TaskWithoutDataDescriptor PARALLEL_JOB_SPAWNER = new TaskWithoutDataDescriptor("parallel-job-spawner"); public static final TaskWithDataDescriptor PARALLEL_JOB = new TaskWithDataDescriptor<>("parallel-job", Integer.class); private TransactionTemplate tx; public ParallellJobConfiguration(TransactionTemplate tx) { this.tx = tx; } /** Start the example */ public static void start(ExampleContext ctx) { ctx.log( "Starting recurring task " + PARALLEL_JOB_SPAWNER.getTaskName() + ". Initial execution-time will be now (deviating from defined schedule)."); ctx.schedulerClient.reschedule( PARALLEL_JOB_SPAWNER.instanceId(RecurringTask.INSTANCE), Instant.now()); } /** Bean definition */ @Bean public Task parallelJobSpawner() { return Tasks.recurring(PARALLEL_JOB_SPAWNER, Schedules.cron("0/20 * * * * *")) .doNotScheduleOnStartup() // just for demo-purposes, so we can start it on-demand .execute( (TaskInstance taskInstance, ExecutionContext executionContext) -> { // Create all or none. SchedulerClient is transactions-aware since a Spring datasource // is used tx.executeWithoutResult( (TransactionStatus status) -> { for (int quarter = 1; quarter < 5; quarter++) { // can use 'executionContext.getSchedulerClient()' to avoid circular // dependency executionContext .getSchedulerClient() .schedule(PARALLEL_JOB.instance("q" + quarter, quarter), Instant.now()); } }); EventLogger.logTask( PARALLEL_JOB_SPAWNER, "Ran. Scheduled tasks for generating quarterly report."); }); } @Bean public Task parallelJob() { return Tasks.oneTime(PARALLEL_JOB) .execute( (TaskInstance taskInstance, ExecutionContext executionContext) -> { long startTime = System.currentTimeMillis(); Utils.sleep(new Random().nextInt(10) * 1000); String threadName = Thread.currentThread().getName(); EventLogger.logTask( PARALLEL_JOB, String.format( "Ran. Generated report for quarter Q%s (in thread '%s', duration %sms)", taskInstance.getData(), threadName, System.currentTimeMillis() - startTime)); }); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy