本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给
重复发明重新定义博客系统的人做个参考 ❤️
- 拉取 GitHub 仓库:每 24 小时定时拉取用户 GitHub 账号下的公有仓库,然后生成一篇文章并在加入到导航中,实际效果请参看这里
- 自动备份:每 24 小时定时导出用户的公开文章到社区账号下(注意仅包含文章,不包含其他数据)。
拉取并展示仓库
仓库数据是通过社区接口获取的, GitHubs#getGitHubRepos
:
public static JSONArray getGitHubRepos(final String githubUserId) {
try {
final HttpResponse res = HttpRequest.get("https://hacpai.com/github/repos?id=" + githubUserId).trustAllCerts(true).
connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send();
if (HttpServletResponse.SC_OK != res.statusCode()) {
return null;
}
res.charset("UTF-8");
final JSONObject result = new JSONObject(res.bodyText());
if (0 != result.optInt(Keys.STATUS_CODE)) {
return null;
}
final JSONObject data = result.optJSONObject(Common.DATA);
final JSONArray ret = data.optJSONArray("githubrepos");
return ret;
} catch (final Exception e) {
LOGGER.log(Level.ERROR, "Gets GitHub repos failed", e);
return null;
}
}
社区会定时调用 GitHub Repos API 获取用户仓库数据,然后持久化到数据库中,Solo 请求数据时查库返回。
自动备份
- 登录博客后台,在工具 -> 偏好设定 -> 参数设置中勾选
备份所有文章到社区
- 程序启动后会进行第一次同步,后续每 24 小时触发一次
- 在社区个人设置 - B3 中可下载备份包
请注意:
- 如果没有生成备份,请查看日志输出,并确认是否打开备份开关、域名配置是否正确(
serverHost
不能用 localhost 或者 IP 地址)以及是否指定为生产环境(runtimeMode=PRODUCTION
)
实现流程:
- 博客端定时触发同步请求,将所有文章(包括草稿和加密文章)导出 md 打 zip 包
- 将包发送至社区服务器,由社区服务器上传到云存储完成备份
代码实现请参考 ExportService#exportHacPai
。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于