SpringBoot3 离线IP归属地查询实战,零外网依赖高效落地

IP 反查地址开源项目 ip2region 通过IP返回地址信息。 maven地址 <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>1.7.2</version> </dependency> 封装工具类 照着官方 test 改 binding/java/src/main/java/org/lionsou 阅读详情

做后端开发,IP归属地查询绝对是高频刚需场景:用户访问日志埋点、地域权限风控、用户地域画像、站点访问统计,几乎处处都能用得上。之前项目里用过不少第三方在线IP查询接口,踩坑无数——高峰期接口限流、服务不稳定宕机,还存在用户IP隐私合规风险,后来改用ip2region这款纯离线开源查询方案,直接解决了所有痛点。

对比下来,基于ip2region搭建的离线IP查询方案,才更适配生产场景,全程本地运行、零外网依赖,单IP查询速度达微秒级,常规场景精准度完全够用,而且免费开源、无调用限制。这篇文章全程只讲实操、不堆砌理论,代码复制即可运行,从环境配置到生产避坑一站式讲透,直接照搬就能用到正式项目里。


一、项目环境与核心资源

先同步实操环境版本,避开版本兼容坑,本文全程基于ip2region 3.3.6最新稳定版开发,适配SpringBoot3生态:

  • JDK 17+

  • SpringBoot 3.2.5

  • ip2region 3.3.6

核心资源说明:ip2region 官方拆分了IPv4和IPv6两套独立离线数据库,需分别下载对应xdb文件,这是实现双协议查询的关键,旧版单文件无法同时支持两种IP,必须下载官方最新版双库文件,避免数据不匹配、查询失败问题。

ip2region双库文件下载地址(Gitee官方): 1. IPv4专用库:https://gitee.com/lionsoul/ip2region/blob/master/data/ip2region_v4.xdb 2. IPv6专用库:https://gitee.com/lionsoul/ip2region/blob/master/data/ip2region_v6.xdb 下载后不要重命名、不要修改后缀,严格保留原名区分双库,贴合ip2region官方加载规范。

二、Maven依赖引入

打开项目 pom.xml,直接引入ip2region核心依赖,SpringBoot3 无需额外适配包,极简引入即可,额外推荐引入hutool工具包,简化后续IP获取和字符串处理,生产项目必备:

<!-- ip2region 离线IP归属地查询核心依赖 最新3.3.6版本 -->
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId>
    <version>3.3.6</version>
</dependency>

<!-- 可选:hutool工具包,简化IP获取和字符串处理,生产常用 -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.25</version>
</dependency>

依赖刷新完成后,直接进入下一步数据库文件配置,全程贴合ip2region官方API写法,无需额外编写复杂配置类,上手即用。

三、xdb数据库文件放置

这一步很关键,ip2region双库文件必须规范放置,避免加载冲突,亲测最优路径方案:

  1. 在项目 resources 目录下,直接新建文件夹 ipdb(无需额外建子目录)

  2. 将下载好的 ip2region_v4.xdb(IPv4库)、ip2region_v6.xdb(IPv6库),直接放入 resources/ipdb 目录下

  3. 严格保留文件原名,不重命名、不修改后缀,防止ip2region加载路径匹配失败

文件放置完成后,目录结构参考下图:

重点避坑:打包时如果出现 xdb 文件丢失、损坏,需要在 pom.xml 的 build 配置中,禁止压缩 xdb 后缀文件,后面避坑章节会详细讲,双库文件都需要生效该配置。

四、封装通用IP查询工具类

ip2region 官方针对IPv4、IPv6双库做了统一API封装,不用手动维护两个独立Searcher,直接通过Config分别配置双库、再由Ip2Region统一托管即可,使用更简洁、稳定性更强。我采用单例模式,项目启动时一次性加载双库文件,避免重复IO占用内存,服务关闭时统一释放资源,完全适配SpringBoot3资源加载规范,全局可直接调用,代码复制即可落地:

import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import org.lionsoul.ip2region.service.Config;
import org.lionsoul.ip2region.service.Ip2Region;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;

import java.io.InputStream;

/**
 * 离线IP归属地查询工具类
 * 遵循官方双库规范:IPv4+IPv6分开配置,统一托管查询
 * 完整覆盖所有内网IP段判断,杜绝公网查询误判
 * 单例模式,全局复用,避免重复加载数据库
 */
@Slf4j
@Component
public class IpRegionUtil {

    /**
     * IPv4、IPv6双库文件路径,对应resources/ipdb目录
     * 严格对应ip2region官方原文件名,不修改、不重命名
     */
    private static final String IPV4_XDB_PATH = "ipdb/ip2region_v4.xdb";
    private static final String IPV6_XDB_PATH = "ipdb/ip2region_v6.xdb";

    /**
     * ip2region官方统一查询对象,托管双库,无需手动拆分Searcher
     */
    private Ip2Region ip2Region;

    /**
     * 项目启动初始化,加载ip2region双库文件
     * 采用BufferCache缓存策略,兼顾查询速度与内存占用
     */
    @PostConstruct
    public void init() {
        try {
            // 加载IPv4数据库配置
            ClassPathResource v4Resource = new ClassPathResource(IPV4_XDB_PATH);
            InputStream v4Is = v4Resource.getInputStream();
            Config v4Config = Config.custom()
                    .setCachePolicy(Config.BufferCache)
                    .setSearchers(10)
                    .setXdbInputStream(v4Is)
                    .asV4();

            // 加载IPv6数据库配置
            ClassPathResource v6Resource = new ClassPathResource(IPV6_XDB_PATH);
            InputStream v6Is = v6Resource.getInputStream();
            Config v6Config = Config.custom()
                    .setCachePolicy(Config.BufferCache)
                    .setSearchers(10)
                    .setXdbInputStream(v6Is)
                    .asV6();

            // 统一创建ip2region查询对象
            ip2Region = Ip2Region.create(v4Config, v6Config);
            log.info("ip2region初始化成功,IPv4+IPv6双库加载完成");
        } catch (Exception e) {
            log.error("ip2region初始化失败,请检查双库文件路径和完整性", e);
            throw new RuntimeException("ip2region异常,无法提供IP查询服务");
        }
    }

    /**
     * 统一IP查询入口,自动识别IPv4/IPv6
     * 完整过滤所有内网IP,包含10段、172段、192段、本地回环
     */
    public String getIpRegion(String ip) {
        try {
            // 空IP直接返回
            if (ip == null || ip.isBlank()) {
                return "内网IP|内网IP";
            }
            // 判断是否为内网IP,包含IPv4全内网段 + IPv6回环
            if (isPrivateIp(ip)) {
                return "内网IP|内网IP";
            }
            // 调用ip2region执行公网IP查询
            return ip2Region.search(ip);
        } catch (Exception e) {
            log.error("ip2region IP查询异常,IP:{}", ip, e);
            return "查询失败";
        }
    }

    /**
     * 完整内网IP判断逻辑
     * IPv4内网范围:
     * 1. 127.0.0.1 本地回环
     * 2. 10.0.0.0 ~ 10.255.255.255
     * 3. 172.16.0.0 ~ 172.31.255.255
     * 4. 192.168.0.0 ~ 192.168.255.255
     * IPv6内网:::1 / 0:0:0:0:0:0:0:1 回环地址
     */
    private boolean isPrivateIp(String ip) {
        // IPv4内网判断
        if (ip.contains(".")) {
            // 本地回环
            if ("127.0.0.1".equals(ip)) {
                return true;
            }
            // 192.168网段
            if (ip.startsWith("192.168.")) {
                return true;
            }
            // 10网段
            if (ip.startsWith("10.")) {
                return true;
            }
            // 172.16.0.0 ~ 172.31.255.255 内网段
            if (ip.startsWith("172.")) {
                String[] parts = ip.split("\\.");
                if (parts.length == 4) {
                    try {
                        int secondSegment = Integer.parseInt(parts[1]);
                        return secondSegment >= 16 && secondSegment <= 31;
                    } catch (NumberFormatException e) {
                        return false;
                    }
                }
            }
            return false;
        }

        // IPv6回环地址判断
        return "::1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip);
    }

    /**
     * 服务关闭,释放ip2region资源
     */
    @PreDestroy
    public void close() {
        try {
            if (ip2Region != null) {
                ip2Region.close();
                log.info("ip2region资源释放完成");
            }
        } catch (Exception e) {
            log.error("ip2region资源释放失败", e);
        }
    }
}

工具类核心说明(贴合ip2region 3.3.6官方规范):

  • 严格遵循ip2region官方API规范,采用Config+Ip2Region统一托管双库,摒弃旧版Searcher手动维护模式,代码更简洁、无调用冲突,兼容性拉满

  • 全内网IP覆盖判断:完整包含 10 段、172.16-31 段、192.168 段、IPv4 回环及 IPv6 回环地址,彻底杜绝内网IP误查公网

  • 自动识别IPv4/IPv6地址,一套接口适配双协议,业务调用无需区分IP类型,无感兼容双网络环境

  • 选用BufferCache缓存策略,平衡查询速度与内存占用,低配服务器可灵活切换为NoCache,适配不同部署环境

  • Spring Bean单例生命周期管理,项目启动一次性加载双库,服务关闭自动释放资源,杜绝内存泄漏,长期运行稳定

  • 全局异常捕获完善,启动失败直接抛出明确异常,方便运维快速排查,避免后续空指针问题

五、编写测试接口,快速验证双协议功能

写一个极简的Controller测试接口,支持两种查询模式:手动传入指定IP查询(兼容IPv4+IPv6)、自动获取当前请求IP查询,适配本地调试、Nginx代理、IPv6部署场景,基于ip2region快速验证功能是否正常:

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;

@Slf4j
@RestController
@RequestMapping("/ip")
@RequiredArgsConstructor
public class IpController {

    private final IpRegionUtil ipRegionUtil;

    /**
     * 手动传入IP查询归属地
     * @param ip 目标IP
     * @return 归属地结果
     */
    @GetMapping("/query")
    public String queryIp(@RequestParam String ip) {
        return ipRegionUtil.getIpRegion(ip);
    }

    /**
     * 获取当前请求的真实IP并查询归属地
     * 适配Nginx、反向代理场景,解决内网IP获取问题
     */
    @GetMapping("/current")
    public String getCurrentIpRegion(HttpServletRequest request) {
        // 优先获取代理转发的真实客户端IP
        String realIp = request.getHeader("X-Real-IP");
        if (realIp == null || realIp.isBlank()) {
            realIp = request.getRemoteAddr();
        }
        log.info("当前请求真实客户端IP:{}", realIp);
        return ipRegionUtil.getIpRegion(realIp);
    }
}

六、启动项目,接口测试

1. 启动SpringBoot项目,观察控制台日志,出现 ip2region初始化成功,IPv4+IPv6双库加载完成 字样,说明双库文件加载正常,核心工具初始化完成

2. 打开Postman或者浏览器,调用测试接口:

  • 公网IPv4测试:http://localhost:8080/api/ip/query?ip=114.114.114.114

  • 内网IPv4测试(172段):http://localhost:8080/api/ip/query?ip=172.16.2.3

  • 内网IPv4测试(10段):http://localhost:8080/api/ip/query?ip=10.0.0.5

  • 公网IPv6测试:http://localhost:8080/api/ip/query?ip=2408:8888:8888::8888

  • 当前请求IP查询:http://localhost:8080/api/ip/current

IPv4正常返回结果示例:中国|江苏省|南京市|0|CN

IPv6正常返回结果示例:中国|北京|北京市|0|CN

各类内网IP(10段、172段、192段、本地回环)测试结果:内网IP|内网IP,过滤逻辑完全生效

七、常见坑与解决方案

1. 打包后找不到xdb文件,项目启动失败

原因:Maven打包时,默认压缩资源文件,导致ip2region依赖的xdb文件损坏;或者双库文件路径写错、少放其中一个库文件。

解决方案:在 pom.xml 的 build 节点中,添加以下配置,禁止压缩 xdb 后缀文件:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>*.xdb</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>*.xdb</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

2. 反向代理后,获取不到真实客户端IP

生产项目基本都用Nginx代理,直接用request.getRemoteAddr()获取的是服务器内网IP,需要Nginx配置转发真实IP,确保ip2region能查询到真实用户IP:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Java代码中优先读取 X-Real-IP 请求头,和我上面Controller代码一致。

八、生产进阶用法

  • 结果格式化:ip2region默认返回带|分隔符,可封装成VO对象,拆分国家、省份、城市、ISP字段,返回前端更友好,IPv4/IPv6查询结果格式完全一致

  • 本地缓存:高频查询IP,加Caffeine或Redis缓存,减少重复调用ip2region,提升性能,IPv4和IPv6地址可共用一套缓存逻辑

  • IPv6部署适配:服务器开启IPv6后,无需修改代码,接口可直接接收IPv6地址,工具类自动识别并调用IPv6专用库查询,开箱即用

  • 定时更新双库:ip2region官方会单独更新IPv4、IPv6数据库,定时下载对应最新xdb文件,替换对应目录文件,重启服务即可,保证双协议数据精准度

九、总结

SpringBoot3集成ip2region实现离线IP查询,全程不到15分钟就能落地,纯本地运行、零外网依赖、严格遵循官方双库规范支持IPv4+IPv6、查询性能拉满,完全能满足中小项目到生产级别的IP查询需求,不管是传统IPv4网络,还是新部署的IPv6环境,都能稳定适配。整个过程没有复杂配置,工具类和接口代码直接复用即可,文中的避坑方案都是实战踩坑总结,照着操作基本不会出现异常。

对比第三方在线接口,ip2region离线方案更稳定、更安全,还没有调用次数限制,也不用担心隐私合规风险,强烈建议大家把项目里的在线IP接口替换成这套方案,上手成本极低,实用性拉满!

避坑指南:解决Smart PLC与WinCC OPC通讯中‘XDB导入失败’和‘DB块变量无法添加’的常见问题 本文详细解析了Smart PLC与WinCC OPC通讯中常见的‘XDB导入失败’和‘DB块变量无法添加’问题,提供了包括IP配置校验、OPC Server版本匹配、防火墙设置等实用解决方案。通过实战案例和技巧分享,帮助工程师高效解决通讯故障,提升系统稳定性。 阅读详情

相关推荐

若依集成ip2region实现离线IP地址定位

离线IP地址定位库主要用于内网或想减少对外访问http带来的资源消耗。 目录 一、引入依赖 二、添加工具类RegionUtil.java 三、修改AddressUtils.java 四、添加离线IP地址库插件 五、添加离线IP地址库 一、引入依赖 <!-- 离线IP地址定位库 --> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region<.

猿小白的博客 1433

今天来认识一个IP地址解析库(ip2region)

文章目录一、问题提出二、使用步骤1.引入库,码云地址:gitee: https://gitee.com/lionsoul/ip2region2.构建返回实体类对象3.获取IP以及详细地址的工具类3.代码测试总结 一、问题提出 不知道各位有没有遇到过这样一个业务场景,当你的账号在其他城市登陆时会收到异地登陆的短信提示,最近个人就在做类似这样的业务,这点就有点像QQ与微信的异地登陆提示。话不多说了,开始之前我们认识一下一个地址解析库(ip2region),此库能够将IP地址解析成一个准确的地址信息,我们要做的

weixin_43144460的博客 2167

ROS2初级面试题汇总

总结和收集了一些关于ros2的问题和解答记录

qq_57633442的博客 5569

Java 根据 IP 地址来获取 位置 -- 使用 ip2region

首先在 maven 里面引入 ip2region : &lt;dependency&gt; &lt;groupId&gt;org.lionsoul&lt;/groupId&gt; &lt;artifactId&gt;ip2region&lt;/artifactId&gt; &lt;version&gt;1.7&lt;/version&gt; &lt;/depen

胡萧徒的博客 1万+

RAGFlow本地部署遇阻:解析进度卡顿的排查与修复指南

本文针对RAGFlow本地部署中常见的文档解析进度卡顿问题,提供了详细的排查与修复指南。核心原因是模型下载网络受阻,解决方案是通过修改环境配置文件,将模型下载源切换至国内镜像站,从而快速解决解析停滞问题。

weixin_29297127的博客 341

TC264摄像头循迹进阶:八邻域与逐行遍历在复杂赛道边界提取中的实战对比

本文对比分析了TC264摄像头循迹中八邻域法与逐行遍历法在复杂赛道边界提取中的实战表现。八邻域法在边界连续性方面表现优异,适合处理环岛等复杂元素;逐行遍历法则在计算效率和岔路口识别上更具优势。文章提供了详细的代码实现和优化策略,帮助智能车竞赛选手根据赛道特点选择最佳算法方案。

rainy的博客 938

ip地址转归属地

点击优快云下载,下载完成之后解压得到 ip2region.xdb 文件,放在java的resource目录下,打包的时候需要把resource目录打包到jar中。

大数据开发 524

SRC漏洞挖掘实战指南:从零入门到月入过万的网络安全副业

网络安全的核心在于识别和修复系统缺陷,其中逻辑漏洞与信息泄露是常见的安全风险。其原理在于应用程序在业务逻辑设计或数据处理过程中存在缺陷,导致未授权访问或敏感数据暴露。掌握这些技术对于构建安全的应用体系至关重要,不仅能有效防范攻击,也为安全研究人员提供了将技术能力变现的合法途径。在漏洞赏金(Bug Bounty)和SRC(安全应急响应中心)等应用场景中,白帽子通过系统化的测试方法,挖掘此类漏洞,既能获得经济回报,又能积累宝贵的实战经验。本文聚焦于逻辑漏洞与信息泄露的实战挖掘技巧,为初学者提供清晰的入门路径和效

weixin_28568819的博客 351

获取ip属地

这个方法获取的IP地址是相对可靠的,在中间没有代理的情况下,的确是最简单有效的方式,但是当今的互联网web应用很少会将 应用服务器 直接 对外服务,有的甚至可能有多层代理。HTTP协议是基于TCP协议的,由于request.getRemoteAddr()获取到的是TCP层直连的客户端ip,对于web应用服务器来说直接连接它的客户端实际上是Nginx,也就是说TCP层是拿不到真实的客户端的ip的。2.X-Real-IP :这也是一个HTTP头部字段,有些代理服务器会将客户端的真实IP地址添加到这个字段中。

while(life)++; 592

微动探测原理及仪器介绍

微动探测原理及仪器介绍 1、微动探测原理 1.1 基本理论 微动是由体波和面波组成,其中微动能量的百分之七十以上都来自于面波,并且它与体波的主要区别是在不均匀的介质中传播时面波会发生频散,而体波不存在频散现象,因此面波是微动探测的主要对象。 对于介质的弹性参数(如横波速度、层薄厚、压缩波速度、密度等),面波传播速度相对比较敏感,特别是对横波的敏感性很高,因此可以利用面波来反演横波速度。 在时间和空间上,微动信号具有以下特性:高度变化、无规律性、无重复性等,有研究发现全世界各处记录的微动信号都有相似

zw461450141的博客 1万+

算法笔记 经典取石子游戏总结 博弈论

经典取石子游戏总结 1.巴什博弈 有一堆石子共n个,A和B轮流取,A先取。每次最少取1个,最多取m个,先取完者获胜(即没有石子取的人失败)。A与B都足够聪明,问A能否获胜。 结论:当n%(m+1)!=0时A必胜,否则必败。 2.斐波那契博弈 有一堆石子共n个,A和B轮流取,A先取。每次最少取1个。第一次不能取完。从第二次开始,每个人取的石子数至少为1,至多为前一个人取的石子数的2倍。先取完者获胜。...

CraigMC的博客 2936

springboot项目获取真实用户ip(不是虚拟ip)

springboot项目获取真实用户ip(不是虚拟ip)

ProBaiXiaodi的博客 2897

Unity 面试篇|(三)设计模式篇 【全面总结 | 持续更新 | 建议收藏】

设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结。设计模式与方法或库的使用方式不同, 你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码, 而是解决特定问题的一般性概念。你可以根据模式来实现符合自己程序实际所需的解决方案。常常会混淆模式和算法, 因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。同一模式在两个不同程序中的实现代码可能会不一样。单例模式。

游戏开发小Y的博客 12万+

java.lang.UnsupportedClassVersionError: org/lionsoul/ip2region/DbSearcher : Unsupported major.minor

java

huan1213858的博客 437

YOLOv8进阶:SEAM注意力与Repulsion Loss双剑合璧,突破遮挡检测瓶颈

做目标检测时,最头疼的莫过于目标被遮挡的场景——行人被树木挡住一半、车辆被广告牌遮挡部分轮廓……这些情况往往让模型“犯迷糊”。但现在,有了SEAM注意力模块和Repulsion Loss排斥损失,我们就能让YOLOv8在遮挡场景下也能“拨开迷雾见真章”。这篇教程会带你一步步理解这两个技术,并亲手把它们融入YOLOv8,让你的检测模型在复杂场景下也能稳如泰山。

FJN110的博客 233

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java获取IP归属地

ip2region是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。

道友,山高路远,如果找不到答案就去找自己。 1050

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

将jar包打入本地maven仓库

org.lionsoul ip2region 1.0 mvn install:install-file -Dfile=“C:\Users\JF\Desktop\ip2region.jar” -DgroupId=org.lionsoul -DartifactId=ip2region -Dversion=1.0 -Dpackaging=jar

weixin_41464742的博客 303

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ip2region IP地址解析工具

ip2region实现输出ip地址的所属地

qq_52506111的博客 3211

免费好用的 ip 地址查询工具

ip2region 使用教程

JavaJasper的博客 2373

springboot获取当前服务ip_SpringBoot集成Ip2Region,实现基于IP定位城市

1:引入mavenorg.lionsoulip2region1.72:编写Ip2RegionUtil工具类import org.apache.commons.io.FileUtils;import org.lionsoul.ip2region.DataBlock;import org.lionsoul.ip2region.DbConfig;import org.lionsoul.ip2region...

weixin_29825861的博客 829

使用强大的离线IP地址定位库ip2region获取城市信息

ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java、php、c、python、nodejs、golang、c#等查询绑定和Binary,B树,内存三种查询算法。

程序员云帆哥的博客 5388

Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:2.7.0(解决办法)

昨日还好端端的idea,今日打开,新建了一个spring boot项目,连主类都一直运行不起来!!! 初步判断是仓库下载不了需要的类,于是删除缓存、重新下载,甚至把仓库都给删了。。。。于是报了如下错误: 后来我仔细看了仓库,原来是setting有问题!!! 解决办法: 1、找到自己的maven目录下的setting.xml: 2、右键以文本的形式打开,找到自己的本地仓库:3、在setting.xml中配置镜像: 于: 添加: <mirror> <id>alimaven

weixin_47192515的博客 7877

SpringBoot使用AOP进行日志记录

*** 获取某些方法执行的method操作(参照包com.example.demo.constant.OptTypeConstant下的常量选择)*///执行声明操作。

qq_54421200的博客 1970

全网上线 IP 归属地功能,一文教你如何实现

点击关注公众号,Java干货及时送达????细心的朋友们可能已经发现了,先在抖音、知乎、快手、小红书等这些平台已经上线了“网络用户显示 IP 的功能”,境外用户显示的是国家,国内的用户显示的省份,而且此项显示无法关闭,归属地强制显示。作为网友,我们可能只是看看戏,但是作为一个努力学习的码农,我们肯定要来看一下这个功能是怎么实现的,今天这篇文章,就用几分钟的时间来讲述一下这个功能是怎么实现的。1获取用户 ...

方志朋的博客 420

十微秒级响应:ip2region多语言SDK封装实战指南

ip2region (2.0 - xdb) 是一个离线IP地址管理与定位框架,能够支持数十亿级别的数据段,并实现十微秒级的搜索性能。它为多种编程语言提供了xdb引擎实现,帮助开发者轻松集成IP定位功能到各类应用中。 ## 🚀 核心优势:为何选择ip2region? ip2region的核心竞争力在于其惊人的性能表现和多语言支持。该框架实现了**十微秒级**的IP地址搜索响应,同时支持IPv4

gitblog_00585的博客 641

十微秒级IP定位:ip2region驱动的CDN节点智能选择方案

ip2region是一个离线IP地址定位库和IP定位数据管理框架,同时支持IPv4和IPv6,10微秒级别的查询效率,提供了众多主流编程语言的xdb数据生成和查询客户端实现。这一特性使其成为CDN节点智能选择方案的理想驱动技术,能够显著提升网络服务的响应速度与用户体验。 ## 一、ip2region核心优势:从技术特性到业务价值 ### 1.1 十亿级数据支撑的精准定位 项目提供了完整的IPv

gitblog_01019的博客 985
上一篇: SpringBoot3快速接入行为验证码:10分钟落地,防刷防暴力破解
下一篇: SpringBoot3接口优化:一行注解搞定字典与关联字段翻译,告别冗余循环
码路星河
博客等级 码龄10年 857粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码路星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值