在微服务多节点部署中,定时任务的执行比单节点部署稍复杂些,有时需保证有且仅有一个节点执行,如缓存数据预热,清理缓存等。
可有如下实现方式:
1、分布式锁:
执行的节点在定时任务调起时加分布式锁,如redis的setNx;
2、mysql 的X锁
可在表中加个状态的枚举字段state。
执行update tb set state = t2 where state = t1; update 的结果为1时表示获得执行,为0则不需执行。
3、spring cloud 中,可根据注册中心中的节点,仅有一个节点执行。
//
public static String getHostIpv4(){
try{
Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
while (allNetInterfaces.hasMoreElements()){
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
Enumeration<InetAddress> addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements()){
InetAddress ip = (InetAddress) addresses.nextElement();
if (ip != null