新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
java中怎么獲取ip地址
java中怎么獲取ip地址 ,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
站在用戶的角度思考問題,與客戶深入溝通,找到順平網(wǎng)站設(shè)計(jì)與順平網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋順平地區(qū)。
package com.ysma.jobs.util; import com.ysma.jobs.common.component.redisManager; import com.ysma.jobs.common.constants.CacheKeyConstants; import com.ysma.jobs.common.dingtalk.ChatbotSend; import com.ysma.jobs.service.XxlService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.UnknownHostException; import java.util.Enumeration; import java.util.concurrent.TimeUnit; /** * IP地址獲取工具 * @Date: 2019/6/17 14:26 * modified by ysma 2019-06-28 */ @DependsOn(value = {"redisManager", "chatbotSend", "xxlService"}) @Component @Slf4j public class IpAdressUtil { @Autowired private ChatbotSend chatbotSend; @Autowired private XxlService xxlService; @Autowired private RedisManager redisManager; /**定義一個(gè)static的ip變量,使得其全??梢?/ private static volatile String MACHINE_IP; private final String OS_WINDOWS = "windows"; private final String OS_MAC = "mac"; public String getServerIp(){ if(StringUtils.isEmpty(MACHINE_IP)){ log.error("IpAddressUtil.getServerIp 為獲取到 { //1.本地ip地址初始化 boolean goOn = true; do { MACHINE_IP = getMachineIp(); try { goOn = StringUtils.isEmpty(MACHINE_IP); if(goOn){//釘釘告警直到獲取到ip地址 chatbotSend.sendMsg("請注意,scheduler應(yīng)用當(dāng)前未獲取到ip地址! 5秒后重試"); TimeUnit.SECONDS.sleep(5); } } catch (Exception ex) { log.error("IpAddressUtil.initIp Exception V_V", ex); } } while (goOn);//直到獲取到本地ip 停止 //2.分布式指定執(zhí)行ip初始化 try { String executeIps = xxlService.getExecuteIps(); String[] split = executeIps.split(","); if(StringUtils.isEmpty(executeIps)){ log.error("IpAddressUtil.initIp xxl未配置指定運(yùn)行的ip地址信息,此處默認(rèn)指定本機(jī)ip,是以最后啟動的機(jī)器ip將獲得執(zhí)行權(quán)限"); setJobRunIP(MACHINE_IP); } else { setJobRunIP(split[0]); } Object runIp = redisManager.get(CacheKeyConstants.JOB_DEFAULT_RUN_IP); log.info("IpAddressUtil.initIp 本機(jī)ip:{}, 指定運(yùn)行ip:{}", MACHINE_IP, runIp == null ? "": runIp.toString()); } catch (Exception ex) { log.error("IpAddressUtil.initIp Exception V_V", ex); } }); initIpThread.setName("init-ip-thread"); initIpThread.start(); } /** * 判斷何種操作系統(tǒng) */ private boolean isThisOS(String prefixName) { String osName = System.getProperty("os.name"); return osName.toLowerCase().startsWith(prefixName); } /** * 獲取機(jī)器的IP地址 */ private String getMachineIp() { String ipString = null; try { if(isThisOS(OS_WINDOWS)){ ipString = InetAddress.getLocalHost().getHostAddress(); log.info("IpAddressUtil.getMachineIp windows os, ip:{}", ipString); } else { EnumerationnetInterfaces = NetworkInterface.getNetworkInterfaces(); boolean findFlag = false; while (netInterfaces.hasMoreElements()) { if(findFlag){ break; } NetworkInterface ni = netInterfaces.nextElement(); Enumeration ips = ni.getInetAddresses(); while (ips.hasMoreElements()) { InetAddress address = ips.nextElement(); if( address.isSiteLocalAddress() && !address.isLoopbackAddress() //127.開頭的都是lookback地址 && !address.getHostAddress().contains(":")){ ipString = address.getHostAddress(); findFlag = true; break; } } } log.info("IpAddressUtil.getMachineIp {} os, ip:{}", isThisOS(OS_MAC) ? "Mac" : "linux/unix", ipString); } } catch (Exception ex) { log.error("IpAddressUtil.getMachineIp error", ex); } return ipString; } }
關(guān)于java中怎么獲取ip地址 問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。
標(biāo)題名稱:java中怎么獲取ip地址
文章網(wǎng)址:http://fisionsoft.com.cn/article/pchhii.html