@Component
@EnableScheduling
public class ScheduledTask {
private static Logger logger = LoggerFactory.getLogger(ScheduledTask.class);
private final static String delFileLockId = "delFileLockId";
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private FileStorageService fileStorageService;
@Autowired
private DiskService diskService;
/**
* 每天5点,22点执行定时任务
*/
@Scheduled(cron = "0 0 5,22 * * ?")
public void delExpireFile() {
DistributeLock distributeLock = new DistributeLock();
boolean lockFlag = distributeLock.getLock(delFileLockId, 10000);
if (lockFlag) {
dosomething...
} else {
logger.debug("获取锁失败");
}
}
/**
* 获得锁
*
*/
class DistributeLock {
public boolean getLock(String lockId, long millisecond) {
Boolean success = redisTemplate.opsForValue().setIfAbsent(lockId, "lock",
millisecond, TimeUnit.MILLISECONDS);
return success != null && success;
}
}
}
package cn.thuniwhir.fileserver.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;
/**
* 分布式锁
*
* @author
* @date 2021/8/11 19:30
*/
@Component
public class DistributeLockUtil {
private static DistributeLockUtil instance = new DistributeLockUtil();
@Autowired
private StringRedisTemplate redisTemplate;
private DistributeLockUtil() {
}
public static DistributeLockUtil getInstance() {
return instance;
}
/**
* 获得锁
*
* @param lockId
* @param millisecond
* @return
*/
public boolean getLock(String lockId, long millisecond) {
Boolean success = redisTemplate.opsForValue().setIfAbsent(lockId, "lock",
millisecond, TimeUnit.MILLISECONDS);
return success != null && success;
}
/**
* 释放锁
*
* @param lockId
*/
public void releaseLock(String lockId) {
redisTemplate.delete(lockId);
}
/**
* 判断是否存在key
*
* @param key
* @return
*/
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
@PostConstruct
public void init() {
instance = this;
instance.redisTemplate = this.redisTemplate;
}
}