主页 > 人工智能  > 

通用查询类接口数据更新的另类实现

通用查询类接口数据更新的另类实现

文章目录 一、简要概述二、java工程实现1. 定义main方法2. 测试运行3. 源码放送

一、简要概述

我们在通用查询类接口开发的另类思路中,关于接口数据的更新,提出了两种方案:

文件监听 #mermaid-svg-oJQjD6jQ8T19XlHA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oJQjD6jQ8T19XlHA .error-icon{fill:#552222;}#mermaid-svg-oJQjD6jQ8T19XlHA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oJQjD6jQ8T19XlHA .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-oJQjD6jQ8T19XlHA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oJQjD6jQ8T19XlHA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oJQjD6jQ8T19XlHA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oJQjD6jQ8T19XlHA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oJQjD6jQ8T19XlHA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oJQjD6jQ8T19XlHA .marker.cross{stroke:#333333;}#mermaid-svg-oJQjD6jQ8T19XlHA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oJQjD6jQ8T19XlHA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oJQjD6jQ8T19XlHA .cluster-label text{fill:#333;}#mermaid-svg-oJQjD6jQ8T19XlHA .cluster-label span{color:#333;}#mermaid-svg-oJQjD6jQ8T19XlHA .label text,#mermaid-svg-oJQjD6jQ8T19XlHA span{fill:#333;color:#333;}#mermaid-svg-oJQjD6jQ8T19XlHA .node rect,#mermaid-svg-oJQjD6jQ8T19XlHA .node circle,#mermaid-svg-oJQjD6jQ8T19XlHA .node ellipse,#mermaid-svg-oJQjD6jQ8T19XlHA .node polygon,#mermaid-svg-oJQjD6jQ8T19XlHA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oJQjD6jQ8T19XlHA .node .label{text-align:center;}#mermaid-svg-oJQjD6jQ8T19XlHA .node.clickable{cursor:pointer;}#mermaid-svg-oJQjD6jQ8T19XlHA .arrowheadPath{fill:#333333;}#mermaid-svg-oJQjD6jQ8T19XlHA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oJQjD6jQ8T19XlHA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oJQjD6jQ8T19XlHA .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-oJQjD6jQ8T19XlHA .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-oJQjD6jQ8T19XlHA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oJQjD6jQ8T19XlHA .cluster text{fill:#333;}#mermaid-svg-oJQjD6jQ8T19XlHA .cluster span{color:#333;}#mermaid-svg-oJQjD6jQ8T19XlHA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oJQjD6jQ8T19XlHA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 监听目录 解析变动文件 写入结果文件

2.定时任务

#mermaid-svg-rXJeZiAxflRsBVzP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rXJeZiAxflRsBVzP .error-icon{fill:#552222;}#mermaid-svg-rXJeZiAxflRsBVzP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rXJeZiAxflRsBVzP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-rXJeZiAxflRsBVzP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rXJeZiAxflRsBVzP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rXJeZiAxflRsBVzP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rXJeZiAxflRsBVzP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rXJeZiAxflRsBVzP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rXJeZiAxflRsBVzP .marker.cross{stroke:#333333;}#mermaid-svg-rXJeZiAxflRsBVzP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rXJeZiAxflRsBVzP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rXJeZiAxflRsBVzP .cluster-label text{fill:#333;}#mermaid-svg-rXJeZiAxflRsBVzP .cluster-label span{color:#333;}#mermaid-svg-rXJeZiAxflRsBVzP .label text,#mermaid-svg-rXJeZiAxflRsBVzP span{fill:#333;color:#333;}#mermaid-svg-rXJeZiAxflRsBVzP .node rect,#mermaid-svg-rXJeZiAxflRsBVzP .node circle,#mermaid-svg-rXJeZiAxflRsBVzP .node ellipse,#mermaid-svg-rXJeZiAxflRsBVzP .node polygon,#mermaid-svg-rXJeZiAxflRsBVzP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rXJeZiAxflRsBVzP .node .label{text-align:center;}#mermaid-svg-rXJeZiAxflRsBVzP .node.clickable{cursor:pointer;}#mermaid-svg-rXJeZiAxflRsBVzP .arrowheadPath{fill:#333333;}#mermaid-svg-rXJeZiAxflRsBVzP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rXJeZiAxflRsBVzP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rXJeZiAxflRsBVzP .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-rXJeZiAxflRsBVzP .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-rXJeZiAxflRsBVzP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rXJeZiAxflRsBVzP .cluster text{fill:#333;}#mermaid-svg-rXJeZiAxflRsBVzP .cluster span{color:#333;}#mermaid-svg-rXJeZiAxflRsBVzP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rXJeZiAxflRsBVzP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 接口获取数据 处理数据 写入结果文件

以上方案,虽然实现了数据更新写入结果文件,但在结果文件的指定上稍麻烦。

联想到lunix下有如下命令,可实现将结果输出到指定的文件中:

echo 'hello world!' > 1.txt

试着执行:

echo "{\"_index\":\"book_shop\",\"_type\":\"it_book\",\"_id\":\"1\",\"_score\":1.0, \"_source\":{\"name\": \"Java编程思想(第4版)\",\"author\": \"[美] Bruce Eckel\",\"category\": \"编程语言\", \"price\": 109.0,\"publisher\": \"机械工业出版社\",\"date\": \"2007-06-01\",\"tags\": [ \"Java\", \"编程语言\" ]}}" > /work/2.txt

发现可以把json字符串写入指定文件,> 后面的路径,如上面的1.txt、/work/2.txt可以为相对路径或绝对路径。

二、java工程实现

我们只需要实现:在main方法中将结果的json字符串输出

注意点: 需要避免将日志打印到console,具体解决办法为日志使用slf4j,并引入slf4j-simple或slf4j-nop

1. 定义main方法 import java.io.IOException; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import com.fly.json.entity.Article; import com.fly.json.entity.BlogData; import com.fly.json.entity.Record; import com.fly.json.utils.JsonBeanUtils; import com.fly.json.utils.ShellExecutor; import lombok.extern.slf4j.Slf4j; /** * 使用slf4j-simple(或slf4j-nop)规避log4j-slf4j-impl将日志打印到console<br> * slf4j-simple默认情況下只输出info以上(包含info)级別的日志, 且仅把日志输入到System.err * */ @Slf4j public class JsonDataPrint { /** * 验证: syso输出内容,jar运行可写入文件<br> * 运行:java -jar easy-json-0.0.1.jar > /work/1.txt * * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // windows下Jar运行返回值中文乱码,unix下Jar运行返回值正常 List<Article> articles = IntStream.rangeClosed(1, 2) .mapToObj(i -> String.format("curl -e \"blog.csdn.net\" \" blog.csdn.net/community/home-api/v1/get-business-list?page=%s&size=10&businessType=blog&username=qq_16127313\"", i)) .map(cmd -> ShellExecutor.execute(cmd)) .map(json -> parseToBlogData(json)) .filter(blog -> blog != null) .map(blog -> blog.getData().getList()) .flatMap(List::stream) .collect(Collectors.toList()); // 构造对象 BlogData blogData = new BlogData().setData(new Record().setList(articles)); String jsonData = JsonBeanUtils.beanToJson(blogData, true); System.out.println(jsonData); } /** * 解析json为BlogData * * @param json * @return */ private static BlogData parseToBlogData(String json) { try { return JsonBeanUtils.jsonToBean(json, BlogData.class, true); } catch (IOException e) { log.error(e.getMessage(), e); return null; } } } 2. 测试运行

在项目根目录执行mvn clean package 会生成jar和docker镜像文件,注意需要在安装了java、maven、docker环境执行。

然后按下面的方式运行,便可实现随时灵活指定输出文件位置的功能。

java -jar easy-json-0.0.1.jar > /work/data.json docker run registry -shanghai.aliyuncs /00fly/easy-json:0.0.1 > data.json 3. 源码放送

gitcode /00fly/easy-json


有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

标签:

通用查询类接口数据更新的另类实现由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“通用查询类接口数据更新的另类实现