Shedlock failed to register a new scheduler to the database table. - throws "The task is not locked." error

Viewed 407

I have configured Shedlock by adding dependencies to the POM.XML as follows:

 <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-spring</artifactId>
        <version>4.29.0</version>
    </dependency>
    <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-provider-jdbc-template</artifactId>
        <version>4.29.0</version>
    </dependency>

Registered the bean:

 @Bean
    public LockProvider lockProvider(DataSource dataSource, JdbcTemplate jdbcTemplate) {
        // @formatter:off
        return  new JdbcTemplateLockProvider(JdbcTemplateLockProvider.Configuration.builder()
                .withTableName("scheduler_lock_vw")
                .withJdbcTemplate(new JdbcTemplate(dataSource))
                .usingDbTime()
                .withLockedByValue("search-service")
                .build());
        // @formatter:on
    }

Added scheduler:

@Component
@Slf4j
public class Scheduler {
    
        
    @Scheduled(cron = "0 * * * * *")
    @SchedulerLock(name = "elastic_reindex_scheduler", lockAtLeastFor = "PT30S", lockAtMostFor = "PT45S")
    public void shortRunningTask() {
        LockAssert.assertLocked();
        log.info("Start short running task");
    }
} 

The issue is the I do not see a record inserted to the table ("scheduler_lock_vw") with this name "elastic_reindex_scheduler". The line - "LockAssert.assertLocked();" throws an error "Unexpected error occurred in scheduled task java.lang.IllegalStateException: The task is not locked.

1 Answers

I cannot see all of your code, however have you added the @EnableSchedulerLock annotation to your configuration class?

For example,

@Configuration
@EnableSchedulerLock(defaultLockAtMostFor = "5m")
...
public class MyConfig {
   ...
}
Related