修改运行机制

This commit is contained in:
daihh
2022-11-03 17:01:49 +08:00
parent a4deec717a
commit 128a3b85dd

View File

@@ -1,30 +1,17 @@
package com.xboe; package com.xboe;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.xboe.common.utils.IDGenerator; import com.xboe.module.idconfig.IdGeneratorAutoConfig;
import com.xboe.module.idconfig.entity.IPMapping;
import com.xboe.module.idconfig.service.IIPMappingService;
import lombok.extern.slf4j.Slf4j;
/** /**
* 启动就执行的一些处理 * 启动就执行的一些处理
*/ */
@Slf4j
@Component @Component
public class ApplicationStartRunner implements ApplicationRunner { public class ApplicationStartRunner implements ApplicationRunner {
@@ -32,64 +19,12 @@ public class ApplicationStartRunner implements ApplicationRunner {
Environment env; Environment env;
@Resource @Resource
IIPMappingService ipMappingService; IdGeneratorAutoConfig autoConfig;
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
//多服务器配置时生成的id根据服务器ip地址不同参数不同防止不同服务器生成的id重复问题
// Map<String,Integer> ipconfig=new HashMap<>(); autoConfig.init();
// ipconfig.put("10.251.186.27",0);//测试环境
// ipconfig.put("10.251.132.41",1);
// ipconfig.put("10.251.132.42",2);
// ipconfig.put("10.251.132.47",3);
String ip=getLinuxLocalIp();
IPMapping ipm = ipMappingService.findByIP(ip);
Integer workServerId=null;
Integer dataCenterId=null;
if(ipm!=null) {
workServerId=ipm.getWorkNum();
dataCenterId=ipm.getDcNum();
}else {
log.warn("无IP【"+ip+"】的配置的workNum和DataCenterNum,系统自动生成随机数");
workServerId=RandomUtils.nextInt(0,31);
dataCenterId=RandomUtils.nextInt(0,31);
ipm=new IPMapping();
ipm.setIp(ip);
ipm.setDcNum(dataCenterId);
ipm.setWorkNum(workServerId);
ipMappingService.save(ipm);
}
IDGenerator.init(workServerId,dataCenterId);
} }
private static String getLinuxLocalIp() throws SocketException {
String ip = "";
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
//String name = intf.getName();
//if (!name.contains("docker") && !name.contains("lo")){
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
String ipaddress = inetAddress.getHostAddress().toString();
if (!ipaddress.contains(":") && !ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {
ip = ipaddress;
//log.error("获取的ip:"+ipaddress);
}
}
}
//}
}
}catch (SocketException ex) {
ip = "127.0.0.1";
//log.error("获取ip地址异常",ex);
}
//log.error("获取的实际的ip:"+ip);
return ip;
}
} }