昆明網(wǎng)站推廣哪家好微信公眾號營銷
文章目錄
- 一、簡要概述
- 二、java工程實現(xiàn)
- 1. 定義main方法
- 2. 測試運(yùn)行
- 3. 源碼放送
一、簡要概述
我們在通用查詢類接口開發(fā)的另類思路中,關(guān)于接口數(shù)據(jù)的更新,提出了兩種方案:
- 文件監(jiān)聽
2.定時任務(wù)
以上方案,雖然實現(xiàn)了數(shù)據(jù)更新寫入結(jié)果文件,但在結(jié)果文件的指定上稍麻煩
。
聯(lián)想到lunix下有如下命令,可實現(xiàn)將結(jié)果輸出到指定的文件中:
echo 'hello world!' > 1.txt
試著執(zhí)行:
echo "{\"_index\":\"book_shop\",\"_type\":\"it_book\",\"_id\":\"1\",\"_score\":1.0, \"_source\":{\"name\": \"Java編程思想(第4版)\",\"author\": \"[美] Bruce Eckel\",\"category\": \"編程語言\", \"price\": 109.0,\"publisher\": \"機(jī)械工業(yè)出版社\",\"date\": \"2007-06-01\",\"tags\": [ \"Java\", \"編程語言\" ]}}" > /work/2.txt
發(fā)現(xiàn)可以把json字符串寫入指定文件,> 后面的路徑,如上面的1.txt、/work/2.txt
可以為相對路徑
或絕對路徑
。
二、java工程實現(xiàn)
我們只需要實現(xiàn):在main方法中將結(jié)果的json字符串輸出
注意點(diǎn): 需要避免將日志打印到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)規(guī)避log4j-slf4j-impl將日志打印到console<br>* slf4j-simple默認(rèn)情況下只輸出info以上(包含info)級別的日志, 且僅把日志輸入到System.err* */
@Slf4j
public class JsonDataPrint
{/*** 驗證: syso輸出內(nèi)容,jar運(yùn)行可寫入文件<br>* 運(yùn)行: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運(yùn)行返回值中文亂碼,unix下Jar運(yùn)行返回值正常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());// 構(gòu)造對象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. 測試運(yùn)行
在項目根目錄執(zhí)行mvn clean package
會生成jar和docker鏡像文件,注意需要在安裝了java、maven、docker環(huán)境
執(zhí)行。
然后按下面的方式運(yùn)行,便可實現(xiàn)隨時靈活指定輸出文件位置
的功能。
java -jar easy-json-0.0.1.jar > /work/data.jsondocker run registry.cn-shanghai.aliyuncs.com/00fly/easy-json:0.0.1 > data.json
3. 源碼放送
https://gitcode.com/00fly/easy-json
有任何問題和建議,都可以向我提問討論,大家一起進(jìn)步,謝謝!
-over-