之前都是直接读取xml文件的,可是这次做东西对方只提供一个URL返回xml,我需要定时读取。
解决方案:
1:通过URL和URLConnection来解析改URL,使其返回inputstream
2:用dom4j解析该inputstream,将解析的数据封装成需要的对象,来存入一个List或Map
3:定义一个Controller来执行该过程
4:用crontab来执行定时任务(linux下,执行crontab -e进行编辑)
@Get("/load")
public String loadDataFromXmlByDate(Invocation inv, @Param("begin") Date datebegin,
@Param("end") Date dateend) {
String begin = DateTimeUtil.getFormatDateTime(datebegin, "yyyyMMdd");
String end = DateTimeUtil.getFormatDateTime(dateend, "yyyyMMdd");
// String ip = inv.getRequest().getRemoteAddr();
String URL = WbConstant.URL + WbConstant.URL_DATE_BEGIN + begin
+ WbConstant.URL_DATE_END + end;
List<Statistic> stats = parseXML(URL);
for (int i = 0; i < stats.size(); i++) {
Statistic st = stats.get(i);
st.setTime(datebegin);
//通过service层来执行逻辑并存储到DB
IResult result = dataService.createStatistic(st);
if (result.isSuccess()) {
if (logger.isInfoEnabled()) {
logger.info("insert data into db from xml success");
}
} else {
if (logger.isInfoEnabled()) {
logger.info(result.getResult("error").toString());
}
}
}
return "ok";
}
/**
* 加载默认日期的xml
* @param inv
* @return
*/
@Get("/loadDefault")
public String defaultLoadDateFromXml(Invocation inv) {
Date today = new Date();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
Date yesterday = cal.getTime();
return loadDataFromXmlByDate(inv, yesterday, today);
}
private List<Statistic> parseXML(String URL) {
long beginTime = System.currentTimeMillis();
List<Statistic> xmlList = new ArrayList<Statistic>();
SAXReader reader = new SAXReader();
URL url = null;
try {
url = new URL(URL);
} catch (MalformedURLException e) {
logger.error("给定的URL生成错误", e);
}
try {
URLConnection urlConnection = url.openConnection();
InputStream urlIn = urlConnection.getInputStream();
doc = reader.read(urlIn);
} catch (IOException e) {
logger.error("IOException:通过URL-openConnection-getInputStream时,错误",
e);
} catch (DocumentException e) {
logger.error("DocumentExcepion:SAXReader解析inputsream为Document时,错误",
e);
}
Element root = doc.getRootElement();
for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
Element e = (Element) it.next();
String date = e.elementText("date");
String pid = e.elementText("pid");
String data = e.elementText("data");
//封装数据为对象
Statistic stat = new Statistic();
stat.setHomeCount(Integer.parseInt(data));
stat.setPid(pid);
stat.setTime(DateTimeUtil.getFormatDate(date));
xmlList.add(stat);
}
long endTime = System.currentTimeMillis();
System.out.println("共花费时间为" + (endTime - beginTime) + "ms");
return xmlList;
}
上面的controller写完了,就可以用crontab来执行定时任务了,该controllerURL为,xxx.com/loadDefault则,定为每天下午2点钟执行一次如下
00 14 * * * wget -a /data/logs/wb/xml.log http://xxx.com/loadDefault
OK了,可以了
分享到:
相关推荐
下面,我们将详细介绍三种使用C#读取XML文件并将其写入数据库的方法。 1. **使用XmlReader类逐行读取并写入** - `XmlReader` 是一个高效的流式读取器,不占用大量内存。通过创建`XmlReader`实例,我们可以逐个节点...
在实际应用中,可能需要关注库存物料的短缺情况,通过定时读取Excel更新数据库,确保库存信息的实时性,从而支持供应链管理和决策。 综上所述,实现“定时读取Excel更新到数据库”的过程涉及到多个环节,包括定时...
本项目涉及的主题是“调用天气接口存入数据库—MySQL”,这是一套实现从网络获取天气预报数据并将其存储到MySQL数据库的流程。下面我们将详细探讨这个过程中的关键知识点。 首先,我们需要了解“天气接口”。这是一...
shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形...该方法通过java代码实现将shp文件的数据读取以及存入数据库
- 这里使用`OPENROWSET`函数读取XML文件,并将其内容存储到`@doc`变量中。 3. **准备XML文档**: - `EXEC sp_xml_preparedocument @Idoc OUTPUT, @doc` - 调用`sp_xml_preparedocument`系统存储过程,将XML数据...
在C#编程中,将图片存入数据库以及从数据库中读取是一项常见的任务,尤其是在开发包含多媒体元素的应用程序时。数据库通常使用BLOB(Binary Large Object)类型来存储非结构化数据,如图像、音频或视频文件。以下是...
本文将深入探讨如何解析`wthrcdn.etouch.cn`提供的XML格式天气数据,并将其存入MySQL数据库。这个接口`http://wthrcdn.etouch.cn/WeatherApi?citykey=101040100`提供了全面且及时更新的天气信息,非常适合进行数据...
读取存入数据库的流程图,流程图存入数据库是乱码
当将图片存入数据库时,通常会将其转换为字节数组,然后以`BLOB`(Binary Large Object)或`VARBINARY`类型存储于数据库表的一个字段中。此过程涉及到以下几个步骤: 1. **打开文件流**:通过`FileStream`类打开...
本案例主要探讨如何使用C#编程语言将Word文件转换为二进制文件流并存入数据库,以及如何从数据库中读取并还原这些文件。下面我们将详细讲解这个过程。 首先,我们要了解将Word文件存储到数据库的基本原理。在C#中,...
在本文中,我们将深入探讨如何使用C# WinForm应用程序来操作XML文件,包括读取、写入、修改XML数据,并将这些数据存入数据库。XML(eXtensible Markup Language)是一种灵活的数据交换格式,常用于存储结构化数据。...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,特别是通过XML(可扩展标记语言)数据交换。这里我们关注的是如何使用POST方法调用一个WebService,并处理返回的XML响应。我们将探讨以下知识点: 1. **...
下面将详细讲解这个过程,包括如何读取图片、将其转换为二进制数据,以及如何从数据库中提取并还原图片。 首先,我们需要了解基本的C#文件操作。在C#中,可以使用`System.IO`命名空间中的`File`类来读取图片文件。...
本教程将深入探讨如何在C#中操作XML,包括读取和生成XML文档,并利用Web Service接口进行数据传输。 1. **C#操作XML:读取** 在C#中,我们可以使用`System.Xml`命名空间中的类来处理XML文档。其中,`XmlDocument`...
java从excel中读取数据并保存到sqlserver数据库中。 其中所需包需要自己下,一个是微软的sqlserver连接驱动包。还有一个是连接excel相关的包,网上都能找到。
在本文中,我们将深入探讨如何使用Java开发一个串口助手应用程序,该程序能接收来自串行端口的数据并将其解析后存储到MySQL数据库中。首先,我们需要了解串口通信的基本概念,然后学习Java如何处理串口输入,接着是...
例如,可以将XML文件作为数据源,通过解析XML获取数据,然后通过JDBC和连接池将这些数据存入数据库。同时,也可以将数据库中的数据导出为XML文件,方便数据交换和备份。 上传的"upload.ppt"可能包含关于XML解析、...
### PHP从数据库中读取数据生成XML的知识点详解 #### 一、PHP连接MySQL数据库 在给定的脚本中,我们首先看到的是通过PHP连接MySQL数据库的操作。这部分代码使用了较旧的`mysql_`扩展,而不是推荐的`mysqli_`或`PDO...
将数据库信息读取到xml中,部分代码 public class schemeXml { static Connection conn=null; static String sql; public static void main(String[] args) { try { //链接数据库,取得数据 //Class.forName(...
xml文件导入到mysql数据库中,包括文件:ConnectionUtils.java,InsertDT.java,db_mysql.properties,test01.xml,需要的jar包dom4j-1.6.1.jar,mysql-connection-java-3.1.1.3-bin.jar,jaxen-1.1-beta-7.jar