返回顶部
首页 > 资讯 > 数据库 >如何将数据从Web服务处理到MongoDB中
  • 280
分享到

如何将数据从Web服务处理到MongoDB中

2024-04-02 19:04:59 280人浏览 泡泡鱼
摘要

本篇内容主要讲解“如何将数据从WEB服务处理到mongoDB中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何将数据从Web服务处理到MonGoDB中”吧!概

本篇内容主要讲解“如何将数据从WEB服务处理到mongoDB中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何将数据从Web服务处理到MonGoDB中”吧!

概观

如何创建一个使用Web服务数据并将其插入MongoDB数据库spring Batch应用程序。

要求

阅读本文的开发人员必须熟悉Spring Batch(示例)和MongoDB。

环境

  • Mongo数据库部署在MLab中。请按照本快速入门中的步骤操作。

  • 批处理应用程序部署在Heroku PaaS中。详情  请看这里。

  • IDE STS或IntelliJ或Eclipse。

  • Java 8 jdk

注意:批处理也可以在本地运行。

脚本

全局场景步骤是:

  1. 从Web服务读取数据,在这种情况下:https://sunrise-sunset.org/api

获取城市列表的坐标,然后调用API以读取日出和日落日期时间。

2.处理数据并提取业务数据

收集数据的业务处理

3.在MongoDB中插入已处理的数据

将处理过的数据保存为mongo文档

编码

  • 输入:本地文件中JSON格式的城市数据列表,如下所示:

[
   {
      “名字”:“Danemark”,
      “城市”:[
         {
            “名字”:“Copenhague”,
            “lat”:55.676098,
            “lng”:12.568337,
            “timeZone”:“CET”
         },
         {
            “名字”:“奥胡斯”,
            “lat”:56.162939,
            “lng”:10.203921,
            “timeZone”:“CET”
         },
         {
            “名字”:“欧登塞”,
            “lat”:55.39594,
            “lng”:10.38831,
            “timeZone”:“CET”
         },
         {
            “名字”:“奥尔堡”,
            “lat”:57.046707,
            “lng”:9.935932,
            “timeZone”:“CET”
         }
      ]
   }
]

我们的场景从本地json文件获取输入数据。映射bean如下:

国豆:

导入 java。io。可序列化 ;
导入 java。util。清单 ;

进口 com。fastxml。杰克逊。注释。JsonIgnoreProperties ;
@JsonIgnoreProperties(ignoreUnknown  =  true)
public  class  BCountry  实现 Serializable {
private  static  final  long  serialVersionUID  =  1L ;
私有 字符串 名称 ;
私人 名单< BCity >  城市 ;
public  BCountry(){
super();
}
public  BCountry(String  name,List < BCity >  cities){
super();
这个。name  =  name ;
这个。城市 =  城市 ;
}
public  BCountry(String  name){
super();
这个。name  =  name ;
}
public  String  getName(){
返回 名称 ;
}
public  void  setName(String  name){
这个。name  =  name ;
}
public  List < BCity >  getCities(){
返回 城市 ;
}
public  void  setCities(List < BCity >  cities){
这个。城市 =  城市 ;
}
@覆盖
public  int  hashCode(){
final  int  prime  =  31 ;
int  result  =  1 ;
结果 =  黄金 *  结果 +((城市 ==  空)? 0:城市。的hashCode());
结果 =  黄金 *  结果 +((名称 ==  空)? 0:名称。的hashCode());
返回 结果 ;
}
@覆盖
public  boolean  equals(Object  obj){
if(this  ==  obj)
返回 true ;
if(obj  ==  null)
返回 虚假 ;
如果(的getClass()!=  OBJ。的getClass())
返回 虚假 ;
BCountry  other  =(BCountry)obj ;
if(cities  ==  null){
如果(其他。城市 !=  空)
返回 虚假 ;
} 否则 如果(!城市。平等(等。城市))
返回 虚假 ;
if(name  ==  null){
如果(其他。名字 !=  空)
返回 虚假 ;
} 否则 如果(!名字。平等(其它。名))
返回 虚假 ;
返回 true ;
}
@覆盖
public  String  toString(){
返回 “BCountry [name =”  +  name  +  “,cities =”  +  cities  +  “]” ;
}
}

和城市豆:

导入 java。io。可序列化 ;
进口 com。fastxml。杰克逊。注释。JsonIgnoreProperties ;
@JsonIgnoreProperties(ignoreUnknown  =  true)
公共 类 BCity  实现 Serializable {
private  static  final  long  serialVersionUID  =  1L ;
private  String  name,timeZone ;
私人 双 拉特,lng ;
public  BCity(){
super();
}
public  BCity(String  name,String  timeZone,double  lat,double  lng){
super();
这个。name  =  name ;
这个。timeZone  =  timeZone ;
这个。lat  =  lat ;
这个。lng  =  lng ;
}
public  String  getName(){
返回 名称 ;
}
public  void  setName(String  name){
这个。name  =  name ;
}
public  String  getTimeZone(){
返回时 区 ;
}
public  void  setTimeZone(String  timeZone){
这个。timeZone  =  timeZone ;
}
public  double  getLat(){
返回 纬度 ;
}
public  void  setLat(double  lat){
这个。lat  =  lat ;
}
public  double  getLng(){
返回 lng ;
}
public  void  setLng(double  lng){
这个。lng  =  lng ;
}
@覆盖
public  String  toString(){
返回 “BCity [name =”  +  name  +  “,timeZone =”  +  timeZone  +  “,lat =”  +  lat  +  “,lng =”  +  lng  +  “]” ;
}
@覆盖
public  int  hashCode(){
final  int  prime  =  31 ;
int  result  =  1 ;
长 温度 ;
temp  =  Double。doubleToLongBits(lat);
result  =  prime  *  result  +(int)(temp  ^(temp  >>>  32));
temp  =  Double。doubleToLongBits(lng);
result  =  prime  *  result  +(int)(temp  ^(temp  >>>  32));
结果 =  黄金 *  结果 +((名称 ==  空)? 0:名称。的hashCode());
结果 =  素 *  结果 +((的timeZone  ==  空)? 0:的timeZone。的hashCode());
返回 结果 ;
}
@覆盖
public  boolean  equals(Object  obj){
if(this  ==  obj)
返回 true ;
if(obj  ==  null)
返回 虚假 ;
如果(的getClass()!=  OBJ。的getClass())
返回 虚假 ;
BCity  other  =(BCity)obj ;
如果(双。doubleToLongBits的(LAT)!=  双。doubleToLongBits的(其他的。LAT))
返回 虚假 ;
如果(双。doubleToLongBits的(LNG)!=  双。doubleToLongBits的(其他的。LNG))
返回 虚假 ;
if(name  ==  null){
如果(其他。名字 !=  空)
返回 虚假 ;
} 否则 如果(!名字。平等(其它。名))
返回 虚假 ;
if(timeZone  ==  null){
如果(其他。的timeZone  !=  空)
返回 虚假 ;
} 否则 如果(!的timeZone。平等(其它。的timeZone))
返回 虚假 ;
返回 true ;
}
}

批量阅读器实现@LineMapper。您可以使读者适应我们的数据源(示例):

导入 java。util。清单 ;
进口 组织。弹簧框架。批次。项目。档案。LineMapper ;
进口 com。ahajri。批次。豆子。BCountry ;
进口 com。fastxml。杰克逊。数据绑定。ObjectMapper ;
进口 com。fastxml。杰克逊。数据绑定。类型。CollectionType ;
公共 类 BCountryJsonLineMapper  实现了 LineMapper < List < BCountry >> {
private  final  ObjectMapper  mapper  =  new  ObjectMapper();
@覆盖
public  List < BCountry >  mapLine(String  line,int  lineNumber)throws  Exception {
CollectionType  collectionType  = mapper。getTypeFactory()。constructCollectionType(列表。类,BCountry。类);
返回 映射器。readValue(line,collectionType);
}
}

处理数据批处理时,检查同一天某个城市的业务处理数据是否已保存在数据库中。在MongoDB的搜索数据的方式就是在这个详细的岗位。

ItemProcessor将@BCountry对象转换为MongoDB Document对象。该过程详述如下:

public  class  BCountryPrayTimeEventItemProcessor  实现 ItemProcessor < List < BCountry >,List < Document >> {
private  static  final  String  EVENTS_COLLECTION_NAME  =  “event” ;
private  static  final  Logger  LOG  =  LoggerFactory。getLogger(BCountryPrayTimeEventItemProcessor。类);
@Autowired
private  PrayTimeService  prayTimeService ;
@Autowired
private  CloudMongoService  cloudMongoService ;
@覆盖
public  List < Document >  进程(List < BCountry >  items)抛出 Exception {
final  List < Document >  docs  =  new  ArrayList <>();
物品。stream()。forEach(item  - > {
final  String  countryName  =  item。getName();
项目。getCities()。stream()。forEach(c  - > {
final  Document  prayTimeCityEventDoc  =  new  Document();
//循环城市并为今天提取祈祷时间
final  String  cityName  =  c。getName();
final  String  cityTimeZone  =  c。getTimeZone();
final  double  lat  =  c。getLat();
final  double  lng  =  c。getLng();
final  LocalDateTime  nowOfCity  =  LocalDateTime。现在(了zoneid。的(cityTimeZone));
final  QueryParam [] queryParams  =  new  QueryParam [ 5 ];
queryParams [ 0 ] =  新 QueryParam(“CITY_NAME” ,OperatorEnum。EQ。名称(),的cityName);
queryParams [ 1 ] =  新 QueryParam(“EVENT_TYPE” ,OperatorEnum。EQ。名称(),事件类型。PRAY_TIME。名称());
queryParams [ 2 ] =  新 QueryParam(“月”,OperatorEnum。EQ。名称(),nowOfCity。getMonthValue());
queryParams [ 3 ] =  新 QueryParam(“DAY_OF_MONTH” ,OperatorEnum。EQ。名称(),nowOfCity。getDayOfMonth());
queryParams [ 4 ] =  新 QueryParam(“COUNTRY_NAME” ,OperatorEnum。EQ。名称(),国家名称);
List < Document >  foundEvents  =  null ;
尝试 {
foundEvents  =  cloudMongoService。搜索(EVENTS_COLLECTION_NAME,queryParams);
} catch(BusinessException  e1){
记录。错误(“====>未找到城市祈祷时间”  +  的cityName  +  “对”  +  nowOfCity。getDayOfMonth()+  “/”
+  nowOfCity。getMonthValue());
}
尝试 {
如果(CollectionUtils。的isEmpty(foundEvents)){
//祈祷时间尚未创建
prayTimeCityEventDoc。put(“country_name”,countryName);
prayTimeCityEventDoc。put(“city_name”,cityName);
prayTimeCityEventDoc。把(“EVENT_TYPE” ,事件类型。PRAY_TIME。名称());
prayTimeCityEventDoc。把(“复发”,RecurringEnum。YEARLY。名称());
prayTimeCityEventDoc。把(“月”,nowOfCity。getMonthValue());
prayTimeCityEventDoc。把(“DAY_OF_MONTH” ,nowOfCity。getDayOfMonth());
prayTimeCityEventDoc。put(“lat”,lat);
prayTimeCityEventDoc。put(“lng”,lng);
prayTimeCityEventDoc。把(“CREATION_DATE” ,HCDateUtils。convertToDateViasqlTimestamp(nowOfCity));
final  Map < String,Object >  prayInfos  =  prayTimeService。getPrayTimeByLatLngDate(lat,lng,
日期。从(nowOfCity。atZone(了zoneid。的(cityTimeZone))。toInstant()),cityTimeZone);
prayTimeCityEventDoc。把(“pray_infos” ,文件。解析(新 GSON()的toJSON(prayInfos)));
docs。add(prayTimeCityEventDoc);
} else {
记录。信息(字符串。格式(“====>祈祷的时间已经存在的城市:%S,月:%d,日:%d” ,
cityName,nowOfCity。getMonthValue(),nowOfCity。getDayOfMonth()));
}
} catch(BusinessException  e){
记录。错误(“计算祈祷时间时出问题:”,e);
抛出 新的 RuntimeException(e);
}
});
});
返回 文档 ;
}
}

批量配置类:

@组态
@EnableBatchProcessing
@EnableScheduling
公共 类 BatchConfiguration {
private  static  final  String  SCANDINAVIAN_COUNTRIES_JSON_FILE  =  “scandinavian-countries.json” ;
private  static  final  String  EVENT_COLLECTION_NAME  =  “event_collection” ;
private  static  final  Logger  LOG  =  LoggerFactory。getLogger(BatchConfiguration。类);
@Autowired
private  JobBuilderFactory  jobBuilderFactory ;
@Autowired
private  StepBuilderFactory  stepBuilderFactory ;
@Autowired
私有的 MLabMongoService  mlabMongoService ;
@豆
public  ResourcelessTransactionManager  transactionManager(){
返回 新的 ResourcelessTransactionManager();
}
@豆
public  MapJobRepositoryFactoryBean  mapJobRepositoryFactory(ResourcelessTransactionManager  txManager)
抛出 异常 {
MapJobRepositoryFactoryBean  factory  =  new  MapJobRepositoryFactoryBean(txManager);
工厂。afterPropertiesSet();
返回 工厂 ;
}
@豆
public  JobRepository  jobRepository(MapJobRepositoryFactoryBean  factory)抛出 异常 {
return(JobRepository)工厂。getObject();
}
private  SimpleJobLauncher  jobLauncher ;

@豆
public  SimpleJobLauncher  jobLauncher(JobRepository  jobRepository){
jobLauncher。setJobRepository(jobRepository);
return  jobLauncher ;
}
@PostConstruct
private  void  initJobLauncher(){
jobLauncher  =  new  SimpleJobLauncher();
}
@豆
FlatFileItemReader < List < BCountry >>  reader(){
FlatFileItemReader < List < BCountry >>  reader  =  new  FlatFileItemReader <>();
读者。setName(“scandinaviandCountriesReader”);
读者。setResource(new  ClassPathResource(SCANDINAVIAN_COUNTRIES_JSON_FILE));
读者。setLineMapper(new  BCountryJsonLineMapper());
回报 读者 ;
}
@豆
public  ItemWriter < List < Document >>  writer(){
返回 新的 ItemWriter < List < Document >>(){
@覆盖
public  void  write(List <? extends  List < Document >>  items)抛出 Exception {
尝试 {
如果(!CollectionUtils。的isEmpty(项目)&&  项目。大小()>  0){
List < Document >  flatDocs  =  items。stream()。flatMap(List :: stream)。收集(收藏家。toList());
mlabMongoService。insertMany(EVENT_COLLECTION_NAME,flatDocs);
} else {
记录。警告(“没有事件可以救......”);
}
} catch(BusinessException  e){
抛出 新的 RuntimeException(e);
}
}
};
}

@豆
public  BCountryTimeEventItemProcessor  processor(){
返回 新的 BCountryTimeEventItemProcessor();
}

@豆
public  Job  scandvTimeJob(){
返回 jobBuilderFactory。get(“scandvTimeJob”)。incrementmenter(new  RunIdIncrementer())。流程(step1())。结束()
。build();
}

@豆
public  Step  step1(){
返回 stepBuilderFactory。得到(“step1”)。< List < BCountry >,List < Document >> chunk(10)。读者(读者())
。处理器(处理器())。作家(作家())。build();
}
// end :: jobstep []

  //每天午夜15分钟
@Scheduled(cron  =  “0 15 0 * * *”)
public  void  startScandvEventTimeJob()throws  Exception {
记录。info(“====>工作开始时间:”  +  新 日期());
JobParameters  param  =  new  JobParametersBuilder()。addString(“作业ID” ,字符串。的valueOf(系统。的currentTimeMillis()))
。toJobParameters();
JobExecution  执行 =  jobLauncher。run(scandvPrayTimeJob(),param);
记录。信息(“====>工作完成了状态:”  +  执行。的getStatus());
}
}

部署de Batch到Heroku:

git add。
git commit -m  “Deploy Batch”
git push heroku master

注意:要禁用默认批量启动,请将此添加到application.yml

s p r i n g:
  b a t c h:
    j o b:
      Ë Ñ 一个b 升é d:˚F 一升小号ë

到此,相信大家对“如何将数据从Web服务处理到MongoDB中”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 如何将数据从Web服务处理到MongoDB中

本文链接: https://lsjlt.com/news/70261.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何将数据从Web服务处理到MongoDB中
    本篇内容主要讲解“如何将数据从Web服务处理到MongoDB中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何将数据从Web服务处理到MongoDB中”吧!概...
    99+
    2024-04-02
  • 如何从mysql中将数据导入到oracle数据库中
    这篇文章主要讲解了“如何从mysql中将数据导入到oracle数据库中”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何从mysql中将数据导入到oracl...
    99+
    2024-04-02
  • 如何将数据库从服务器移到浏览器
    这篇文章给大家分享的是有关如何将数据库从服务器移到浏览器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、链接数据库  indexedDB没有创建数据库的概念,你可以直接链接数据...
    99+
    2024-04-02
  • 如何将数据库从MySQL移植到MemSQL
    本篇内容介绍了“如何将数据库从MySQL移植到MemSQL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 如何将数据从阿里云服务器传输到电脑
    在云计算时代,越来越多的企业和个人选择将数据存储在云端服务器上,以实现数据的高效管理和共享。然而,有时候我们需要将数据从阿里云服务器传输到个人电脑,以便进行进一步处理或备份。本文将介绍几种常见的方法,帮助您轻松完成数据传输任务。 1. 使用...
    99+
    2024-01-14
    阿里 如何将 服务器
  • 如何把海量数据从 Oracle 导入到 Mongodb
    一、背景 因为业务需求,现在需要把 Oracle 中几千万的数据转移到 Mongodb,如果通过 PL/SQL Develop 导出,速度会比较慢,而且也很占用带宽。发现一款软件 sqluldr2 数据导出...
    99+
    2024-04-02
  • 如何将数据从SQL Server 迁移到PostgreSQL?将数据从SQL Server 迁移到PostgreSQL方法分析!
    在不同类型的数据库之间迁移数据并非易事。在本文中,我们将比较几种从 SQL Server 转换到 PostgreSQL 的方法。Microsoft SQL Server 是一个很棒的数据库引擎,但在某些情...
    99+
    2020-08-12
    如何将数据从SQL Server 迁移到PostgreSQL?将数据从SQL Server 迁移到PostgreSQL方法分析!
  • mongodb亿级数据如何处理
    处理MongoDB亿级数据的方法可以包括以下几个方面:1. 数据分片:将数据分散存储在不同的分片上,可以提高读写性能。可以根据数据的...
    99+
    2023-08-23
    mongodb
  • 从 Bash 到 Python,如何更好地处理大数据?
    随着数据处理的需求不断增长,Bash shell 脚本语言的强大处理能力已经无法满足人们的需求。Python 作为一门功能强大的编程语言,其拥有更加灵活、高效的大数据处理功能,成为了越来越多数据分析师和数据科学家的首选。本文将介绍如何将 B...
    99+
    2023-10-01
    大数据 编程算法 bash
  • 如何将数据上传到云服务器
    将数据上传到云服务器可以通过以下步骤实现:1. 选择云服务提供商:选择一个可靠的云服务提供商。2. 创建云服务器实例:在选择的云服务...
    99+
    2023-09-27
    云服务器
  • 如何通过SQL语句将数据从MongoDB导入关系型数据库?
    如何通过SQL语句将数据从MongoDB导入关系型数据库?摘要:MongoDB和关系型数据库在数据存储和查询方式上有很大的区别,因此在将数据从MongoDB导入关系型数据库时,需要采取一些特定的方法。本文将介绍如何使用SQL语句和代码示例将...
    99+
    2023-12-17
    MongoDB SQL语句 导入数据
  • PHP中如何处理Web服务错误?
    在开发Web服务时,错误处理是极其重要的,因为它可以帮助我们及时发现并解决潜在的问题,保障服务的稳定性和可靠性。本文将介绍PHP中如何处理Web服务错误,并提供具体的代码示例。错误处理机制PHP提供了许多内置的函数和类,用于处理不同类型的错...
    99+
    2023-12-09
    PHP Web服务 错误处理
  • scp如何将数据从一台linux服务器复制到另一台linux服务器
    这篇文章主要介绍scp如何将数据从一台linux服务器复制到另一台linux服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!scp 是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类...
    99+
    2023-06-09
  • 如何将数据从 Oracle 迁移到 MySQL:分步指南
    数据迁移在各种业务场景中发挥着至关重要的作用。当您的公司将其服务从本地迁移到云端时,数据迁移就会介入,将数据从旧位置传输到新位置。另一种常见的做法可能是更换或升级服务器或存储设备。在这种情况下,数据迁移可确保数据的顺利高效传输,最大限度地减...
    99+
    2023-08-31
    oracle mysql 数据库
  • 如何将sqlite3中数据导入到mysql中
    小编给大家分享一下如何将sqlite3中数据导入到mysql中,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法如下:从sqli...
    99+
    2024-04-02
  • 如何处理到期的云服务器数据注销
    1.备份数据 在注销云服务器之前,首先要确保你的数据已经备份。备份数据是非常重要的,因为一旦服务器注销,你将无法再访问其中的数据。你可以选择将数据备份到本地存储设备或者其他云存储服务中。 2.导出数据 如果你需要保留一些特定的数据,可以将...
    99+
    2023-10-28
    如何处理 服务器 数据
  • Kafka中如何将数据导入到Elasticsearch
    本篇文章为大家展示了Kafka中如何将数据导入到Elasticsearch,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Elasticsearch作为当前主流的全文检索引擎,除了强大的全文检索能力和...
    99+
    2023-06-02
  • 从PHP到Linux:如何处理数组和对象?
    数组和对象是编程中经常使用的数据结构,无论是在PHP还是Linux中,都有着广泛的应用。但是,如何处理这些数据结构却是一个需要掌握的基础知识。在本篇文章中,我们将探讨如何在PHP和Linux中处理数组和对象。 一、PHP中的数组和对象 在...
    99+
    2023-08-24
    linux 数组 对象
  • 如何将表或数据库从一台MySQL服务器复制到另一台MySQL服务器?
    如果我们要将表或数据库从一台 MySQL 服务器复制到另一台 MySQL 服务器,请使用带有数据库名称和表名称的 mysqldump 。 在源主机上运行以下命令。这会将完整的数据库转储到dump.txt 文件中。$ mysqldump -u...
    99+
    2023-10-22
  • 如何将参数从中间件传递到控制器
    php小编百草为您介绍如何将参数从中间件传递到控制器。在开发过程中,我们经常需要在中间件中获取一些参数,然后将这些参数传递给控制器进行后续处理。要实现这个功能,我们可以通过在中间件中使...
    99+
    2024-02-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作