springboot项目中集成ip2region遇到的问题及终极解决办法

Easter79 等级 412 0 0
标签: string

1、问题回顾

按照ip2region项目的官方集成到springboot项目后,运行测试一切都ok,没有任何问题。但是当项目打成可执行的jar包后再运行,却显示找不到ip2region.db,无法找到资源文件的错误。异常代码如下:

java.io.FileNotFoundException: class path resource [ip2region/ip2region.db] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/app.jar!/BOOT-INF/classes!/ip2region/ip2region.db

2、解决办法

将ip2region.db文件放到本地目录,然后直接读取本地文件进行ip解析,代码如下:

public static String getCityInfo(String ip) {
        DbSearcher searcher = null;
        try {
            String dbPath = GlobalConfig.getProfile() + "ip2region/ip2region.db";
            //String dbPath = "f:/profile/ip2region/ip2region.db";  //本地测试使用地址
            File file = new File(dbPath);
            if (file.exists()) {
                DbConfig config = new DbConfig();
                searcher = new DbSearcher(config, file.getPath());
                Method method = searcher.getClass().getMethod("btreeSearch", String.class);
                if (!Util.isIpAddress(ip)) {
                    log.error("Error: Invalid ip address");
                }
                DataBlock dataBlock = (DataBlock) method.invoke(searcher, ip);
                return dataBlock.getRegion();
            }
        } catch (Exception e) {
            log.error("获取地址信息异常:{}", e.getLocalizedMessage());
        }
        return "XX XX";
}

注:GlobalConfig.getProfile()是配置的本地文件存储路径

代码地址:[代码下载]

收藏
评论区

相关推荐

JAVA 中为什么String 是immutable的
本文翻译自:[http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.programcreek.com%2F2013%2F04%2Fwhy-string-
Java中有趣的String、StringBuffer与StringBuilder
String介绍 ---------   String类属于java.lang包中,String类是不可变类,任何对String的改变都会引发新的String对象的生成。   创建String的两种方式:   1.通过构造器创建:String str = new String("I am a string."); 2.通过变量赋值:String
Java中的String,StringBuilder,StringBuffer三者的区别
[Java中的String,StringBuilder,StringBuffer三者的区别](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fsu-feng%2Fp%2F6659064.html) -----------------------------
java中string和stringbuffer
 String s="Hello"; s+="World"; //以上代码等价与下述代码 StringBuffer sb=new StringBuffer(s); sb.append("world"); s=sb.toString(); StringBuffer会产生许多临时对象,从而导致程序的执行效率变低,
C++中string类的正确写法
C++ 的一个常见面试题是让你实现一个 String 类,限于时间,不可能要求具备 std::string 的功能,但至少要求能正确管理资源。具体来说: 1. 能像 int 类型那样定义变量,并且支持赋值、复制。 2. 能用作函数的参数类型及返回类型。 3. 能用作标准库容器的元素类型,即 vector/list/deque 的
PageImpl在springboot中的JSON序列化问题
在rest api中使用 org.springframework.data.domain.PageImpl  返回分页数据,有出现一些问题,问题以及解决方式如下: _**(1) 返回的结果在springboot 1.x 和 springboot 2.x中不一致**_ 例如以下API @RestController public clas
Python中的基础数据类型(String,Number)及其常用用法简析
点击上方“ **Python爬虫与数据挖掘** ”,进行关注 回复“**书籍**”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 寄意寒星荃不察,我以我血荐轩辕。 Python中的基础数据类型 ============== 前言 -- 哈喽,各位小伙伴们,相信大家和我一样,在开始接触Python这门语言的时候,会遇到很多困
Spring Boot集成Redis,这个坑把我害惨了!
![](https://oscimg.oschina.net/oscnet/836578aa-a315-4dfd-81af-46af9176a5d5.jpg) 最近项目中使用SpringBoot集成Redis,踩到了一个坑:从Redis中获取数据为null,但实际上Redis中是存在对应的数据的。是什么原因导致此坑的呢? 本文就带大家从SpringBoo
SpringBoot2.0之二 新建RESTfull风格项目
1、新建一个Maven项目(具体方法可以参照 SpringBoot之一) 2、先建一个User类 package com.somta.springboot.pojo; public class User { private String id; private String name;//姓名 private Integer age;//年龄
SpringBoot学习之路:01.开发环境搭建及概念叙述
         最近刚刚开始学习SpringBoot框架,在此记录自己的学习过程,记录自己在学习过程中遇到的坑,以及解决问题的过程,有不对的地方请各位批评指正,开始环境搭建之前先说说一些基本的概念: 1.什么是SpringBoot ---------------        SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简
SpringBoot2.0之二 新建RESTfull风格项目
1、新建一个Maven项目(具体方法可以参照 SpringBoot之一) 2、先建一个User类 package com.somta.springboot.pojo; public class User { private String id; private String name;//姓名 private Integer age;//年龄
SpringBoot学习之路:01.开发环境搭建及概念叙述
         最近刚刚开始学习SpringBoot框架,在此记录自己的学习过程,记录自己在学习过程中遇到的坑,以及解决问题的过程,有不对的地方请各位批评指正,开始环境搭建之前先说说一些基本的概念: 1.什么是SpringBoot ---------------        SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简
String 和 new String()的区别
String 和 new String()的区别 For Example String str1 = "ABC" String str2 = new String("ABC"); String str1 = "ABC"; 可能创建一个对象或者不创建对象。 如果"ABC" 这个字符串z在java String池中不存在,会在java String池中
springboot原理
SpringBoot为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开SpringBoot的神秘面纱,让它不再神秘。   * * * @SpringBootApplication public class Application { public static void main(Str
springboot项目中集成ip2region遇到的问题及终极解决办法
### 1、问题回顾 按照ip2region项目的官方集成到springboot项目后,运行测试一切都ok,没有任何问题。但是当项目打成可执行的jar包后再运行,却显示找不到ip2region.db,无法找到资源文件的错误。异常代码如下: java.io.FileNotFoundException: class path resource [ip