mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-12-27 10:35:59 +08:00
update 增加对IPv6地址库的支持,优化Ip2Region初始化逻辑
This commit is contained in:
@@ -10,6 +10,7 @@ import org.lionsoul.ip2region.service.Ip2Region;
|
|||||||
import org.lionsoul.ip2region.xdb.Util;
|
import org.lionsoul.ip2region.xdb.Util;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.net.URL;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,7 +34,6 @@ public class RegionUtils {
|
|||||||
// 未知地址
|
// 未知地址
|
||||||
public static final String UNKNOWN_ADDRESS = "未知";
|
public static final String UNKNOWN_ADDRESS = "未知";
|
||||||
|
|
||||||
|
|
||||||
// Ip2Region服务实例
|
// Ip2Region服务实例
|
||||||
private static Ip2Region ip2Region;
|
private static Ip2Region ip2Region;
|
||||||
|
|
||||||
@@ -42,36 +42,42 @@ public class RegionUtils {
|
|||||||
try {
|
try {
|
||||||
// 创建临时文件用于处理IP离线数据库xdb文件
|
// 创建临时文件用于处理IP离线数据库xdb文件
|
||||||
File v4TempXdb = FileUtil.writeFromStream(ResourceUtil.getStream(DEFAULT_IPV4_XDB_PATH), FileUtil.createTempFile());
|
File v4TempXdb = FileUtil.writeFromStream(ResourceUtil.getStream(DEFAULT_IPV4_XDB_PATH), FileUtil.createTempFile());
|
||||||
// File v6TempXdb = FileUtil.writeFromStream(ResourceUtil.getStream(DEFAULT_IPV6_XDB_PATH), FileUtil.createTempFile());
|
|
||||||
|
|
||||||
// IPv4配置
|
// IPv4配置
|
||||||
Config v4Config = Config.custom()
|
Config v4Config = Config.custom()
|
||||||
.setCachePolicy(Config.BufferCache)
|
.setCachePolicy(Config.BufferCache)
|
||||||
.setXdbPath(v4TempXdb.getPath())
|
.setXdbPath(v4TempXdb.getPath())
|
||||||
.asV4();
|
.asV4();
|
||||||
// IPv6配置
|
|
||||||
// Config v6Config = Config.custom()
|
|
||||||
// .setCachePolicy(Config.BufferCache)
|
|
||||||
// .setXdbPath(v6TempXdb.getPath())
|
|
||||||
// .asV6();
|
|
||||||
|
|
||||||
// 初始化Ip2Region实例
|
|
||||||
RegionUtils.ip2Region = Ip2Region.create(v4Config, null);
|
|
||||||
// RegionUtils.ip2Region = Ip2Region.create(v4Config, v6Config);
|
|
||||||
|
|
||||||
// 删除临时文件
|
// 删除临时文件
|
||||||
// 注意:因为使用的 CachePolicy 为 BufferCache,BufferCache是加载整个xdb文件到内存中,所以临时文件的删除不会影响到正常的使用。如果使用的是 VIndexCache 或 NoCache(即实时读取文件),删除临时文件会导致xdb数据库读取不到而无法使用。
|
// 注意:因为使用的 CachePolicy 为 BufferCache,BufferCache是加载整个xdb文件到内存中,所以临时文件的删除不会影响到正常的使用。如果使用的是 VIndexCache 或 NoCache(即实时读取文件),删除临时文件会导致xdb数据库读取不到而无法使用。
|
||||||
// CachePolicy的三种策略:BufferCache(全量读取xdb到内存中)、VIndexCache(按需读取并缓存)、NoCache(实时读取)
|
// CachePolicy的三种策略:BufferCache(全量读取xdb到内存中)、VIndexCache(按需读取并缓存)、NoCache(实时读取)
|
||||||
// 一般而言,更建议把xdb数据库放到一个指定的文件目录中(即不打包进jar包中),然后使用 NoCache + 配合SearcherPool的并发池读取数据,更方便随时更新xdb数据库
|
// 一般而言,更建议把xdb数据库放到一个指定的文件目录中(即不打包进jar包中),然后使用 NoCache + 配合SearcherPool的并发池读取数据,更方便随时更新xdb数据库
|
||||||
v4TempXdb.delete();
|
v4TempXdb.delete();
|
||||||
// v6TempXdb.delete();
|
|
||||||
|
// IPv6配置
|
||||||
|
Config v6Config = null;
|
||||||
|
URL v6Url = ResourceUtil.getResource(DEFAULT_IPV6_XDB_PATH);
|
||||||
|
if (v6Url == null) {
|
||||||
|
log.info("未加载 IPv6 地址库:未在类路径下找到文件 {}。当前仅启用 IPv4 查询。如需启用 IPv6,请将 ip2region_v6.xdb 放置到 resources 目录(与 {} 同级)。",
|
||||||
|
DEFAULT_IPV6_XDB_PATH, DEFAULT_IPV4_XDB_PATH);
|
||||||
|
} else {
|
||||||
|
File v6TempXdb = FileUtil.writeFromStream(v6Url.openStream(), FileUtil.createTempFile());
|
||||||
|
v6Config = Config.custom()
|
||||||
|
.setCachePolicy(Config.BufferCache)
|
||||||
|
.setXdbPath(v6TempXdb.getPath())
|
||||||
|
.asV6();
|
||||||
|
// 删除临时文件
|
||||||
|
v6TempXdb.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化Ip2Region实例
|
||||||
|
RegionUtils.ip2Region = Ip2Region.create(v4Config, v6Config);
|
||||||
log.info("Ip2RegionHelper初始化成功,加载IP地址库数据成功!");
|
log.info("Ip2RegionHelper初始化成功,加载IP地址库数据成功!");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new ServiceException("Ip2RegionHelper初始化失败,原因:{}", e.getMessage());
|
throw new ServiceException("Ip2RegionHelper初始化失败,原因:{}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据IP地址离线获取城市
|
* 根据IP地址离线获取城市
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user