ShedLockConfig.java
package access.cron;
import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.core.SimpleLock;
import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.Optional;
@Configuration
@EnableSchedulerLock(defaultLockAtMostFor = "PT10M")
public class ShedLockConfig {
@Bean
@Profile("!test")
public LockProvider lockProvider(DataSource dataSource) {
LockProvider delegate = new JdbcTemplateLockProvider(
JdbcTemplateLockProvider.Configuration.builder()
.withJdbcTemplate(new JdbcTemplate(dataSource))
.usingDbTime() // Use DB time, not app-node time — avoids clock skew
.build()
);
return new DeadlockLockProvider(delegate);
}
@Bean
@Profile("test")
public LockProvider noOpLockProvider() {
return lockConfiguration -> Optional.of(() -> new SimpleLock() {
@Override
public void unlock() {
//noop
}
});
}
}