接口读取数据(json)并写入本地

本文介绍了一个使用Spring框架实现的定时任务服务,该服务每分钟从远程API获取停车点信息并将其保存到数据库中。文章详细展示了如何配置定时任务、进行HTTP请求、解析JSON响应并持久化数据。
package com.fykj.service.bike;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.fykj.dao.ParkInfo.ParkInfoMapper;
import com.fykj.entity.ParkInfo.ParkInfo;
import com.fykj.util.HttpUtil;

import com.fykj.util.PropertyLoader;
import net.sf.json.JSONNull;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

@Service("ParkInfoService")
@Component
public class ParkInfoService {

@Autowired
private ParkInfoMapper parkInfoMapper;

/**
* 停车点
*/
@SuppressWarnings("static-access")
//@Scheduled(cron = "0 0 * * * ?")//一个小时一次
//@Scheduled(cron = "0 0 */2 * * ?")//2个小时一次
@Scheduled(cron = "0 0/60 * * * ? ")//一分钟一次
public void addParkInfo() throws Exception {

PropertyLoader properties = new PropertyLoader("parkInfo.properties");

//    System.out.println("当前时间戳:" + new Date().getTime());
//    System.out.println("昨天时间戳:" + (new Date().getTime() - 86400000L));//86400000L
long t1 =    (new Date().getTime());
long t2 =    (new Date().getTime()) - 3600000L;
System.out.println("当前时间戳:" + t1);
System.out.println("一个小时前时间戳:" + t2 );
String param = "{\"key\":\"" + properties.getProperty("key") + "\"," + "\"reqTime\":\""
+ new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "\"," + "\"requestResource\":\""
+ properties.getProperty("requestResource") + "\"," + "\"createTimeFrom\":\""
//+ properties.getProperty("createTimeFrom") + "\"," + "\"createTimeTo\":\""
+ t2 + "\"," + "\"createTimeTo\":\""
+ t1 + "\"}";
//+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "\"}";

String content = HttpUtil.sendPost(param, properties.getProperty("queryParkInfoUrl"));

//System.out.println("数据3:内容"+content);

if (StringUtils.isEmpty(content)) {
return;
}

if (content.indexOf("[") < 0 || content.indexOf("]") < 0) {

System.out.println("数据错误!!!!");

return;
}

content = content.substring(content.indexOf("["), (content.indexOf("]") + 1));

JSONArray jsonArr = new JSONArray();

jsonArr = jsonArr.fromObject(content);

ParkInfo parkInfo = new ParkInfo();

for (int i = 0; i < jsonArr.size(); i++) {

JSONObject job = jsonArr.getJSONObject(i);

String parkCode = job.getString("parkCode");
String streetName = job.getString("streetName");
int isInput = job.getInt("isInput");
String parkName = job.getString("parkName");

String longitude = job.getString("longitude");
String latitude = job.getString("latitude");
if ("0".equals(latitude) && "0".equals(longitude)) {
continue;
}
int berthNum = job.getInt("berthNum");
int berthRemain = job.getInt("berthRemain");

int parkingCount = JSONNull.class==job.get("parkingCount").getClass() ? 0: job.getInt("parkingCount");

String receivableAmount = job.getString("receivableAmount");
String realPaidAmount = job.getString("realPaidAmount");
int parkModel = job.getInt("parkModel");

parkInfo.setParkcode(parkCode);
parkInfo.setStreetname(streetName);
parkInfo.setIsinput(isInput);
parkInfo.setParkname(parkName);
parkInfo.setLongitude(longitude);
parkInfo.setLatitude(latitude);
parkInfo.setBerthnum(berthNum);
parkInfo.setBerthremain(berthRemain);
parkInfo.setParkingcount(parkingCount);
parkInfo.setReceivableamount(receivableAmount);
parkInfo.setRealpaidamount(realPaidAmount);
parkInfo.setParkmodel(parkModel);


ParkInfo parkInfo1 = parkInfoMapper.findByNo(parkInfo.getParkcode());

if (parkInfo1 != null) {

ParkInfo parkInfo2 = parkInfoMapper.findByid(parkInfo1.getId());
parkInfoMapper.insertside(parkInfo2);

parkInfoMapper.updateByPrimaryKeySelective(parkInfo);

//    System.out.println("数据5方法已运行");
} else {
parkInfoMapper.insertSelective(parkInfo);
}

}

}
}

 

转载于:https://www.cnblogs.com/weixc/p/9020082.html

下面是一个从 Kafka 读取 JSON 数据将其写入本地文件的 PyFlink 脚本: ```python from pyflink.datastream import StreamExecutionEnvironment from pyflink.table import StreamTableEnvironment, DataTypes from pyflink.table.descriptors import Kafka, FileSystem, Json from pyflink.table.udf import udf # 定义函数用于将 JSON 字符串转换成 Python 字典 @udf(input_types=[DataTypes.STRING()], result_type=DataTypes.MAP(DataTypes.STRING(), DataTypes.STRING())) def json_to_map(s): import json return json.loads(s) # 创建 StreamExecutionEnvironment 和 StreamTableEnvironment env = StreamExecutionEnvironment.get_execution_environment() env.set_parallelism(1) t_env = StreamTableEnvironment.create(env) # 定义 Kafka 和 FileSystem 的连接信息 kafka_props = { "bootstrap.servers": "localhost:9092", "group.id": "test-group" } fs_props = { "fs.default-scheme": "file:///", "storage.path": "/path/to/output" } # 注册 Kafka 和 FileSystem 表 t_env \ .connect( \ Kafka() .version("universal") .topic("test-topic") .start_from_earliest() .properties(kafka_props) ) \ .with_format( \ Json() .json_schema("{type: 'object', properties: {id: {type: 'string'}, name: {type: 'string'}}}") .fail_on_missing_field(True) .ignore_parse_errors(True) ) \ .with_schema( \ DataTypes.ROW([DataTypes.FIELD("id", DataTypes.STRING()), DataTypes.FIELD("name", DataTypes.STRING())]) ) \ .register_table_source("kafka_source") t_env \ .connect( \ FileSystem() .path("/path/to/output") .with_format(Json()) .with_schema( \ DataTypes.ROW([DataTypes.FIELD("id", DataTypes.STRING()), DataTypes.FIELD("name", DataTypes.STRING())]) ) ) \ .create_temporary_table("fs_sink") # 从 Kafka 读取数据,转换成 Python 字典后写入本地文件 t_env \ .from_path("kafka_source") \ .select(json_to_map("value").alias("data")) \ .select("data['id'] as id, data['name'] as name") \ .insert_into("fs_sink") # 执行任务 t_env.execute("kafka_to_local_file") ``` 在脚本中,我们首先定义了一个 UDF 函数 `json_to_map`,用于将 JSON 字符串转换成 Python 字典。接着,我们创建了 StreamExecutionEnvironment 和 StreamTableEnvironment,设置了行度为 1。 然后,我们定义了 Kafka 和 FileSystem 的连接信息,以及 JSON 格式的数据格式。我们使用 `register_table_source` 方法将 Kafka 表注册到 TableEnvironment 中,使用 `create_temporary_table` 方法创建一个临时的 FileSystem 表。 最后,我们从 Kafka 表中读取数据将其转换成 Python 字典后写入本地文件。我们使用 `insert_into` 方法将数据插入到 FileSystem 表中,使用 `execute` 方法执行任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值