mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
feat: add JVM shutdown hook to release database lock
This commit is contained in:
parent
91bb28abbb
commit
79a61454f3
@ -21,4 +21,8 @@ public interface OmsLockRepository extends JpaRepository<OmsLockDO, Long> {
|
|||||||
int deleteByLockName(String lockName);
|
int deleteByLockName(String lockName);
|
||||||
|
|
||||||
OmsLockDO findByLockName(String lockName);
|
OmsLockDO findByLockName(String lockName);
|
||||||
|
|
||||||
|
@Modifying
|
||||||
|
@Transactional
|
||||||
|
int deleteByOwnerIP(String ip);
|
||||||
}
|
}
|
||||||
|
@ -6,11 +6,10 @@ import com.github.kfcfans.powerjob.server.extension.LockService;
|
|||||||
import com.github.kfcfans.powerjob.server.persistence.core.model.OmsLockDO;
|
import com.github.kfcfans.powerjob.server.persistence.core.model.OmsLockDO;
|
||||||
import com.github.kfcfans.powerjob.server.persistence.core.repository.OmsLockRepository;
|
import com.github.kfcfans.powerjob.server.persistence.core.repository.OmsLockRepository;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基于数据库实现的分布式锁
|
* 基于数据库实现的分布式锁
|
||||||
*
|
*
|
||||||
@ -21,13 +20,25 @@ import javax.annotation.Resource;
|
|||||||
@Service
|
@Service
|
||||||
public class DatabaseLockService implements LockService {
|
public class DatabaseLockService implements LockService {
|
||||||
|
|
||||||
@Resource
|
private final String ownerIp;
|
||||||
private OmsLockRepository omsLockRepository;
|
private final OmsLockRepository omsLockRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public DatabaseLockService(OmsLockRepository omsLockRepository) {
|
||||||
|
|
||||||
|
this.ownerIp = NetUtils.getLocalHost();
|
||||||
|
this.omsLockRepository = omsLockRepository;
|
||||||
|
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
||||||
|
int num = omsLockRepository.deleteByOwnerIP(ownerIp);
|
||||||
|
log.info("[DatabaseLockService] execute shutdown hook, release all lock(owner={},num={})", ownerIp, num);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean tryLock(String name, long maxLockTime) {
|
public boolean tryLock(String name, long maxLockTime) {
|
||||||
|
|
||||||
OmsLockDO newLock = new OmsLockDO(name, NetUtils.getLocalHost(), maxLockTime);
|
OmsLockDO newLock = new OmsLockDO(name, ownerIp, maxLockTime);
|
||||||
try {
|
try {
|
||||||
omsLockRepository.saveAndFlush(newLock);
|
omsLockRepository.saveAndFlush(newLock);
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user