文章目录
- 一、简要概述
- 二、java工程实现
- 1. 定义main方法
- 2. 测试运行
- 3. 源码放送
一、简要概述
我们在通用查询类接口开发的另类思路中,关于接口数据的更新,提出了两种方案:
- 文件监听
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-