Appearance
配置 IP2Location
avalon-ip2location-spring-boot-starter 现在直接暴露官方 com.ip2location.IP2Location 类型,Starter 本身只负责三件事:
- 读取 BIN 数据文件
- 将官方
IP2Location注册为 Spring Bean - 管理 Bean 生命周期
也就是说,业务代码不再使用自定义 Searcher、IpResult、IpUtils 包装层,而是直接使用官方 API。
默认行为
- 默认数据文件位置:
classpath:IP2LOCATION-LITE-DB11.IPV6.BIN - 默认配置前缀:
ip2location - 默认注册 Bean:
com.ip2location.IP2Location
如果需要修改 BIN 文件位置,可以在应用配置中覆盖:
yaml
ip2location:
db-file-location: classpath:IP2LOCATION-LITE-DB11.IPV6.BIN本地准备数据文件
1. 获取下载 Token
登录官方站点后,在下载页获取 download token:
2. 下载或刷新本地 BIN 文件
推荐通过环境变量提供 Token:
bash
export IP2LOCATION_DOWNLOAD_TOKEN=your-token
./gradlew downloadIpData -PrefreshIpDb=trueWindows PowerShell:
powershell
$env:IP2LOCATION_DOWNLOAD_TOKEN="your-token"
.\gradlew.bat downloadIpData -PrefreshIpDb=true也可以直接使用 Gradle 属性:
bash
./gradlew downloadIpData -PipDbDownloadToken=your-token -PrefreshIpDb=true说明:
- 如果仓库中已经存在
IP2LOCATION-LITE-DB11.IPV6.BIN,任务默认会直接复用本地文件 - 只有缺文件,或者显式指定
-PrefreshIpDb=true时,才会访问官方下载接口
业务中如何使用
Starter 自动配置完成后,直接注入官方 IP2Location 即可:
kotlin
import com.ip2location.IP2Location
import com.ip2location.IPResult
import org.springframework.stereotype.Service
@Service
class GeoIpService(
private val ip2Location: IP2Location,
) {
fun lookup(ip: String): IPResult = ip2Location.ipQuery(ip)
}返回结果和状态码都来自官方库,例如:
OKEMPTY_IP_ADDRESSINVALID_IP_ADDRESSMISSING_FILEIPV6_NOT_SUPPORTED
因此业务层应按官方返回结构处理查询结果。
CI 如何配置
GitHub Actions 需要配置仓库级 Secret:
- 名称:
IP2LOCATION_DOWNLOAD_TOKEN
配置路径:
Settings->Secrets and variables->Actions->New repository secret
当前 CI 工作流会:
- 先尝试恢复
IP2LOCATION-LITE-DB11.IPV6.BIN缓存 - 缓存没有命中且 Secret 存在时,自动调用
downloadIpData下载 - 下载成功后由
actions/cache写回缓存 - 如果既没有缓存又没有 Secret,构建会直接失败
这样可以避免每次 CI 都重新下载官方数据文件。