批量地址数据获取地理编码信息(数据量可达百万)
- 本文章的来自于作者工作中的真实项目,如果看到文章的你有更好的建议,烦请在文章下留言或私信我。
逻辑梳理
- 获取上传的文件内容,转换为程序可操作的数据;
- 地址为空的数据,可以直接保存;
- 将地址转为需要入库的数据结构;
- 地址为数组,当地理编码数据异常时需要将当前数组保存为错误数据(目前是保存到文件中)
- 调用
批量地理编码接口
时,需要注意地址的格式
- 数据入库。
- 正常数据可使用分批入库,节省操作时间;
- 为空数据直接入库;
- 调用批量地理编码接口查询错误的数据,需要逐一查询确认查询结果无异议后,统一入库。
前言
本文只阐述了作者在开发中的需求和实现,肯定和读者的境况有些不同需要读者自行调整和修改部分代码。对读者有帮助的可能是文件读取、多线程查询、指定大小截取二维数组、多线程入库等部分代码块,文章主要是为有困惑的读者提供部分思路,实际问题需要具体分析和解决。
配置文件
pom.xml
1 | <dependency> |
application.yml
- 数据源配置可以参考作者的另一个篇文章,文章地址
SpringBoot配置多数据源
1 | spring: |
配置文件实体类
错误数据保存地址
1 |
|
高德地理编码配置文件
1 |
|
SpringBoot
使用RestTemplate
调用RESRful
1 | import org.springframework.context.annotation.Bean; |
实体类
文件内容对应的实体类
1 |
|
入库的实体类
1 | import java.io.Serializable; |
网格数据实体类
1 |
|
Repository
数据库使用的是
Oracle
,如果是使用MySQL
或其他数据库烦请自行百度.暂时没有添加相关代码。数据源配置可以参考作者的另一个篇文章,文章地址
SpringBoot配置多数据源
地址转换为网格后的数据入库
1 | import java.util.List; |
Service
逻辑实现
1 | import java.io.BufferedInputStream; |
高德地理编码API工具类
二维数组拆分为指定大小
1 |
|
高德地理编码
API
调用实例
- 注: 在
非 controller
中读取配置文件时获取不到配置类的属性值,欲了解详情可以看下我的另一篇博客SpringBoot配置文件详解
1 | import java.util.ArrayList; |
常见问题
RestTemplate 调用API超时
解决方案
- 配置类
RestTemplateConfig
中不设置connectTimeout、readTimeout
- 将超时时间变长,
timeout
时间单位为 毫秒
实现多线程有返回值的执行
1 | /** |