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

com.github.kagkarlsson.scheduler.boot.config.DbSchedulerProperties Maven / Gradle / Ivy

There is a newer version: 15.1.2
Show 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.scheduler.boot.config;

import com.github.kagkarlsson.scheduler.jdbc.JdbcTaskRepository;
import com.github.kagkarlsson.scheduler.PollingStrategyConfig;
import com.github.kagkarlsson.scheduler.SchedulerBuilder;
import java.time.Duration;

import com.github.kagkarlsson.scheduler.logging.LogLevel;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.DurationUnit;

import static java.time.temporal.ChronoUnit.*;

@ConfigurationProperties("db-scheduler")
public class DbSchedulerProperties {
    /**
     * Whether to enable auto configuration of the db-scheduler.
     */
    private boolean enabled = true;

    /***
     * 

Number of threads. */ private int threads = 10; /** * How often to update the heartbeat timestamp for running executions. */ @DurationUnit(MINUTES) private Duration heartbeatInterval = SchedulerBuilder.DEFAULT_HEARTBEAT_INTERVAL; /** *

Name of this scheduler-instance. The name is stored in the database when an execution is * picked by a scheduler. * *

If the name is {@code null} or not configured, the hostname of the running machine will be * used. */ private String schedulerName; /** *

Name of the table used to track task-executions. Must match the database. Change name in the * table definitions accordingly when creating or modifying the table. */ private String tableName = JdbcTaskRepository.DEFAULT_TABLE_NAME; /** *

If this is enabled, the scheduler will attempt to directly execute tasks that are scheduled * to {@code now()}, or a time in the past. For this to work, the call to {@code schedule(..)} * must not occur from within a transaction, because the record will not yet be visible to the * scheduler (if this is a requirement, see the method * {@code scheduler.triggerCheckForDueExecutions())} */ private boolean immediateExecutionEnabled = false; /** *

How often the scheduler checks the database for due executions. */ @DurationUnit(SECONDS) private Duration pollingInterval = SchedulerBuilder.DEFAULT_POLLING_INTERVAL; /** *

What polling-strategy to use. Valid values are: FETCH,LOCK_AND_FETCH */ private PollingStrategyConfig.Type pollingStrategy = SchedulerBuilder.DEFAULT_POLLING_STRATEGY.type; /** *

The limit at which more executions are fetched from the database after fetching a full batch.

*/ private double pollingStrategyLowerLimitFractionOfThreads = SchedulerBuilder.DEFAULT_POLLING_STRATEGY.lowerLimitFractionOfThreads; /** *

For Type=FETCH, the number of due executions fetched from the database in each batch.

*

For Type=LOCK_AND_FETCH, the maximum number of executions to pick and queue for execution.

*/ private double pollingStrategyUpperLimitFractionOfThreads = SchedulerBuilder.DEFAULT_POLLING_STRATEGY.upperLimitFractionOfThreads; /** *

Whether to start the scheduler when the application context has been loaded or as soon as * possible. */ private boolean delayStartupUntilContextReady = false; /** *

The time after which executions with unknown tasks are automatically deleted.

*/ @DurationUnit(HOURS) private Duration deleteUnresolvedAfter = SchedulerBuilder.DEFAULT_DELETION_OF_UNRESOLVED_TASKS_DURATION; /** * How long the scheduler will wait before interrupting executor-service threads. * If you find yourself using this, consider if it is possible to instead regularly check * executionContext.getSchedulerState().isShuttingDown() in the ExecutionHandler and abort long-running task. */ @DurationUnit(SECONDS) private Duration shutdownMaxWait = SchedulerBuilder.SHUTDOWN_MAX_WAIT; /** *

Which log level to use when logging task failures. Defaults to {@link LogLevel#DEBUG}.

*/ private LogLevel failureLoggerLevel = SchedulerBuilder.DEFAULT_FAILURE_LOG_LEVEL; /** *

Whether or not to log the {@link Throwable} that caused a task to fail.

*/ private boolean failureLoggerLogStackTrace = SchedulerBuilder.LOG_STACK_TRACE_ON_FAILURE; public boolean isEnabled() { return enabled; } public void setEnabled(final boolean enabled) { this.enabled = enabled; } public int getThreads() { return threads; } public void setThreads(final int threads) { this.threads = threads; } public Duration getHeartbeatInterval() { return heartbeatInterval; } public void setHeartbeatInterval(final Duration heartbeatInterval) { this.heartbeatInterval = heartbeatInterval; } public String getSchedulerName() { return schedulerName; } public void setSchedulerName(String schedulerName) { this.schedulerName = schedulerName; } public String getTableName() { return tableName; } public void setTableName(final String tableName) { this.tableName = tableName; } public boolean isImmediateExecutionEnabled() { return immediateExecutionEnabled; } public void setImmediateExecutionEnabled(boolean immediateExecutionEnabled) { this.immediateExecutionEnabled = immediateExecutionEnabled; } public Duration getPollingInterval() { return pollingInterval; } public void setPollingInterval(final Duration pollingInterval) { this.pollingInterval = pollingInterval; } public boolean isDelayStartupUntilContextReady() { return delayStartupUntilContextReady; } public void setDelayStartupUntilContextReady(final boolean delayStartupUntilContextReady) { this.delayStartupUntilContextReady = delayStartupUntilContextReady; } public Duration getDeleteUnresolvedAfter() { return deleteUnresolvedAfter; } public void setDeleteUnresolvedAfter(Duration deleteUnresolvedAfter) { this.deleteUnresolvedAfter = deleteUnresolvedAfter; } public Duration getShutdownMaxWait() { return shutdownMaxWait; } public void setShutdownMaxWait(Duration shutdownMaxWait) { this.shutdownMaxWait = shutdownMaxWait; } public LogLevel getFailureLoggerLevel() { return failureLoggerLevel; } public void setFailureLoggerLevel(LogLevel failureLoggerLevel) { this.failureLoggerLevel = failureLoggerLevel; } public boolean isFailureLoggerLogStackTrace() { return failureLoggerLogStackTrace; } public void setFailureLoggerLogStackTrace(boolean failureLoggerLogStackTrace) { this.failureLoggerLogStackTrace = failureLoggerLogStackTrace; } public PollingStrategyConfig.Type getPollingStrategy() { return pollingStrategy; } public void setPollingStrategy(PollingStrategyConfig.Type pollingStrategy) { this.pollingStrategy = pollingStrategy; } public double getPollingStrategyLowerLimitFractionOfThreads() { return pollingStrategyLowerLimitFractionOfThreads; } public void setPollingStrategyLowerLimitFractionOfThreads(double pollingStrategyLowerLimitFractionOfThreads) { this.pollingStrategyLowerLimitFractionOfThreads = pollingStrategyLowerLimitFractionOfThreads; } public double getPollingStrategyUpperLimitFractionOfThreads() { return pollingStrategyUpperLimitFractionOfThreads; } public void setPollingStrategyUpperLimitFractionOfThreads(double pollingStrategyUpperLimitFractionOfThreads) { this.pollingStrategyUpperLimitFractionOfThreads = pollingStrategyUpperLimitFractionOfThreads; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy