CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-net-javacrumbs-shedlock--shedlock-spring

Spring Framework integration for ShedLock distributed locking system providing annotation-based task scheduling locks.

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration and Setup

Configuration classes and annotations for enabling and setting up ShedLock in Spring applications.

@EnableSchedulerLock Annotation

The main configuration annotation that enables ShedLock integration in Spring applications.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(SchedulerLockConfigurationSelector.class)
public @interface EnableSchedulerLock {
    
    enum InterceptMode {
        @Deprecated(forRemoval = true)
        PROXY_SCHEDULER,  // Wraps TaskScheduler in proxy
        PROXY_METHOD      // Proxies scheduled methods directly (recommended)
    }
    
    InterceptMode interceptMode() default InterceptMode.PROXY_METHOD;
    String defaultLockAtMostFor();                    // Required
    String defaultLockAtLeastFor() default "PT0S";   // Optional
    AdviceMode mode() default AdviceMode.PROXY;       // Spring AOP mode
    boolean proxyTargetClass() default false;        // Use CGLIB proxies
    int order() default Ordered.LOWEST_PRECEDENCE;   // Advisor order
}

Parameters

  • interceptMode: Determines how locking is applied
    • PROXY_METHOD (recommended): Intercepts method calls directly
    • PROXY_SCHEDULER (deprecated): Intercepts TaskScheduler calls
  • defaultLockAtMostFor: Default maximum lock duration (required)
  • defaultLockAtLeastFor: Default minimum lock duration (optional, defaults to "PT0S")
  • mode: Spring AOP advice mode (PROXY or ASPECTJ)
  • proxyTargetClass: Whether to use CGLIB proxies instead of JDK proxies
  • order: Execution order when multiple advisors are present

Usage Example

@Configuration
@EnableSchedulerLock(
    interceptMode = InterceptMode.PROXY_METHOD,
    defaultLockAtMostFor = "PT30M",
    defaultLockAtLeastFor = "PT1M"
)
public class ShedLockConfig {
    
    @Bean
    public LockProvider lockProvider() {
        return new JdbcTemplateLockProvider(dataSource);
    }
}

Configuration Infrastructure

SchedulerLockConfigurationSelector

Selects appropriate configuration classes based on the intercept mode.

public class SchedulerLockConfigurationSelector implements ImportSelector {
    public String[] selectImports(AnnotationMetadata metadata);
}

Imports different configuration classes based on interceptMode:

  • PROXY_METHOD: Imports MethodProxyLockConfiguration
  • PROXY_SCHEDULER: Imports SchedulerProxyLockConfiguration

AbstractLockConfiguration

Base class for lock configuration beans that processes @EnableSchedulerLock metadata.

public abstract class AbstractLockConfiguration implements ImportAware {
    protected AnnotationAttributes annotationAttributes;
    
    public void setImportMetadata(AnnotationMetadata importMetadata);
    protected int getOrder();
}

Method Proxy Configuration

Configuration for method-level lock interception.

@Configuration
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public class MethodProxyLockConfiguration extends AbstractLockConfiguration {
    
    @Bean
    @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
    public MethodProxyScheduledLockAdvisor proxyScheduledLockAopBeanPostProcessor(
        ListableBeanFactory beanFactory, 
        @Lazy ExtendedLockConfigurationExtractor lockConfigurationExtractor
    );
}

Scheduler Proxy Configuration

Configuration for scheduler-level lock interception (deprecated mode).

@Configuration
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) 
public class SchedulerProxyLockConfiguration extends AbstractLockConfiguration {
    
    @Bean
    @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
    public SchedulerProxyScheduledLockAdvisor proxyScheduledLockAopBeanPostProcessor(
        ListableBeanFactory listableBeanFactory,
        @Lazy ExtendedLockConfigurationExtractor lockConfigurationExtractor
    );
}

Lock Configuration Extractor Configuration

Defines the ExtendedLockConfigurationExtractor bean that handles lock configuration extraction.

@Configuration
public class LockConfigurationExtractorConfiguration extends AbstractLockConfiguration 
    implements EmbeddedValueResolverAware, BeanFactoryAware {
    
    @Bean
    public ExtendedLockConfigurationExtractor lockConfigurationExtractor();
    
    public void setEmbeddedValueResolver(StringValueResolver resolver);
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException;
}

Duration Format Support

ShedLock supports multiple duration formats through the StringToDurationConverter:

ISO8601 Duration Format

"PT30S"   // 30 seconds
"PT10M"   // 10 minutes  
"PT1H"    // 1 hour
"PT24H"   // 24 hours

Simple Duration Format

"30s"     // 30 seconds
"10m"     // 10 minutes
"1h"      // 1 hour  
"1d"      // 1 day
"500ms"   // 500 milliseconds
"1000us"  // 1000 microseconds
"1000ns"  // 1000 nanoseconds

String to Duration Converter

public class StringToDurationConverter implements Converter<String, Duration> {
    public static final StringToDurationConverter INSTANCE;
    
    public Duration convert(String source);
}

The converter automatically detects the format and converts accordingly. Invalid formats throw IllegalStateException.

Default Task Scheduler Registration

When using PROXY_SCHEDULER mode, a default TaskScheduler is automatically registered if none exists.

@Component
public class RegisterDefaultTaskSchedulerPostProcessor 
    implements BeanDefinitionRegistryPostProcessor, Ordered, BeanFactoryAware {
    
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
    public int getOrder(); // Returns LOWEST_PRECEDENCE
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException;
}

This processor:

  1. Checks if any TaskScheduler beans exist
  2. If none found, registers a ConcurrentTaskScheduler
  3. If a single ScheduledExecutorService exists, uses it for the scheduler
  4. Logs warnings for multiple ScheduledExecutorService beans

Install with Tessl CLI

npx tessl i tessl/maven-net-javacrumbs-shedlock--shedlock-spring

docs

advanced-configuration.md

configuration.md

index.md

method-locking.md

task-scheduler.md

tile.json