首先在实时程序中 调用接口不现实,肯定是调用离线库去解决地址的,这种准确性很重要,现在推荐下面这个离线库:
注意点:
1)下载包 放到对应的目录,特别是在生产环境,一般放在lib目录下 动态写活
https://dev.maxmind.com/geoip/geoip2/geolite2/#Downloads
下载解压
2)写代码:
代码: 执行main方法
package test_demo; import com.maxmind.geoip2.DatabaseReader; import com.maxmind.geoip2.exception.GeoIp2Exception; import com.maxmind.geoip2.model.CityResponse; import com.maxmind.geoip2.record.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.net.InetAddress; public class IPUtils { private static Logger logger = LoggerFactory.getLogger(IPUtils.class); /** * 全局静态变量,DatabaseReader,保证类加载时加载一次 */ private static DatabaseReader reader; /** * 静态代码块,保证项目启动只获取一次文件 */ static { File database = null; try { //绝对路径读取文件方式 database = new File("C:\\Users\\Administrator\\Desktop\\部署flume+storm文档\\Flume优化\\GeoLite2-City_20191126\\GeoLite2-City.mmdb"); // 通过 InputStream 流式读取文件,目的解决无法通过File方式读取jar包内的文件的问题·1