Spring Cloud(Spring Boot)分佈式定時器的簡單解決方案ShedLock

pom添加依賴:java

<dependency>
			<groupId>net.javacrumbs.shedlock</groupId>
			<artifactId>shedlock-spring</artifactId>
			<version>0.17.0</version>
		</dependency>
		<dependency>
			<groupId>net.javacrumbs.shedlock</groupId>
			<artifactId>shedlock-provider-jedis</artifactId>
			<version>0.17.0</version>
		</dependency>

添加SpringBean注入git

@Bean
    public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) {
        return ScheduledLockConfigurationBuilder
            .withLockProvider(lockProvider)
            .withPoolSize(10)
            .withDefaultLockAtMostFor(Duration.ofMinutes(10))
            .build();
    }
    @Bean
    public LockProvider lockProvider() {
        String property = env.getProperty("spring.redis.host");
        Integer valueOf = Integer.valueOf(env.getProperty("spring.redis.port"));
        JedisPool jedisPool = new JedisPool(property, valueOf);
        return new JedisLockProvider(jedisPool);
    }

添加@EnableScheduling到SpringBoot配置github

 

添加@SchedulerLock到定時器業務方法入口redis

@Scheduled(cron = "0/15 * * * * ?")
    @SchedulerLock(name = "scheduledTaskName", lockAtMostFor = 9000, lockAtLeastFor = 9000)
    public void processItem() throws InterruptedException {
        log.warn("@Scheduled service");
        Thread.sleep(2000);
    }

ShedLock項目地址:https://github.com/lukas-krecan/ShedLockspring

相關文章
相關標籤/搜索