当前位置: 首页 > news >正文

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

文章目录

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

一、简要概述

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

  1. 文件监听
监听目录
解析变动文件
写入结果文件

2.定时任务

接口获取数据
处理数据
写入结果文件

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

联想到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\" \"https://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.cn-shanghai.aliyuncs.com/00fly/easy-json:0.0.1 > data.json

3. 源码放送

https://gitcode.com/00fly/easy-json


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

-over-

相关文章:

  • 动态规划多阶段报童模型,c++ 实现, java 实现
  • 代码随想录算法训练营第33天 | 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树
  • I/O函数
  • 【vue-echarts】——05.柱状图
  • 从Aurora看Xanadu可扩展模块化光量子计算机的现状与未来展望
  • 设计模式Python版 观察者模式
  • 零基础安装并搭建QT的环境以及QT开发工具
  • 授权与认证之jwt(五)创建Aop切面类
  • HashMap与HashTable的区别
  • 使用【华为手机】给吉利车机升级安装第三方软件教程【保姆级教程】
  • 高频 SQL 50 题(基础版)_1193. 每月交易 I
  • win32汇编环境,窗口程序使用树形视图示例一
  • Memcached监控本机内存(比redis速度更快)
  • 浙大 DeepSeek 线上课学习笔记
  • 时态知识图谱中的补全过滤策略(过滤损坏四元组)
  • 安装第三方软件报错:Called RunScript when not marked in progress
  • 绪论(4)
  • WPF 复杂页面布局及漂亮 UI 界面设计全解析
  • 基于python的网络爬虫爬取天气数据及可视化分析(Matplotlib、sk-learn等,包括ppt,视频)
  • SpringBoot高校运动会管理系统 附带详细运行指导视频
  • 网站建设需要哪些人员/seo优化教程培训
  • 做陶瓷公司网站/百度手机快速排名点击软件
  • 如何做网站打广告/网站页面优化包括
  • 郴州市高中阶段招生录取系统/seo技术培训中心
  • 学做网站最好的网站/sem工作原理
  • 帮别人做网站涉嫌诈骗/怎么自己制作一个网站