-
Arthas
Arthas是什么
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
——Arthas中文说明文档
前几天遇到了一个这样的场景:
......
共3张
-
分页系统有问题,有from和size,但会将from+size数据全部读入内存中,导致不能大规模取数据默认from+size不能超过10000es建议只作为条件查找工具,不推荐作为大规模读取工具
-
部署流程Jenkins部署非常简单,推荐两种方案
下载-运行jar下载-部署tomcat
下载官网下载war包运行jar
java -jar jenkins.war
等待几秒后Jenkins启动成功,访问http://localhost:8080/ ,会提示输入一串安全口令,以及这段口令保存的位置,之后根据提示操作即可。jar包运行很简单很方便,但是如果需要一些个性化配置还是用tomcat部署吧。部署tomcat将war包放在tomcat的webapp目录下,重启tomcat,tomcat会自动部署。
-
Jenkins
Jenkins是什么
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使持续集成变成可能。——搜狗百科
Jenkins用来干什么我的理解,Jenkins的本质其实是crontab+shell脚本,也就是说通过crontab+shell可以实现的事情,可以很方便地通过Jenkins的GUI完成。比如,发布版本,线上监控报警,定时任务等等……
Jenkins的优点http://www.jenkins.org.cn 的介绍是比较权威的,我个人使用之后感受最深的是这几点:
易安装,这是真的,傻瓜式安装从下载完成到开始使用不到20s易配置,这也是真的,提供了比较友好的GUI,功能相对较为丰富,便于定制变更支持,说白了就是支持自动同步最新代码并编译,然后定制自己的操作流程
......
-
下载1.通过GitHub或官方网站下载editor.md压缩包2.解压3.将需要的部分保存到网站静态资源目录4.在页面引用相关文件
下载文件目录结构一般而言下载的文件是editor.md-master.zip
editor.md-master
tests // 测试文件
src // 源文件
scss // 一些css文件
......
-
Editor.md
官方介绍Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件),基于 CodeMirror、jQuery 和 Marked 构建。
GitHub地址https://github.com/pandao/editor.md
官方网站https://pandao.github.io/editor.md/
参考资料官方示例:https://pandao.github.io/editor.md/examples/form-get-value.html
-
Markdown
Markdown是什么个人理解,markdown是一套可以方便转化为Html的标记语言,特点是简洁。通常Html需要写的标签,Markdown通过一个字符就能达到同样的效果。比如,加粗在Html中是<strong>加粗</strong>,在Markdown中表示为**加粗**。
Markdown的宗旨Markdown 的目标是实现「易读易写」。可读性,无论如何,都是最重要的。一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText,而最大灵感来源其实是纯文本电子邮件的格式。 ——转自www.markdown.cn
为什么使用Markdown不同的人有不同的理由,对于我个人而言是这些:
语法简洁,效率更高Less is more,尽管Html可以轻易调整格式,但对于大段文本而言,写大量的样式代码一定是非常麻烦的事情,但Markdown常用标签就那么几个,风格高度统一由于第2点,需要大量编辑文本的网页经常可以看到Html富文本编辑器,相较而言Markdown的富文本编辑器我个人更喜欢对于码农来说,能敲两三下键盘就能做到的事情,显然不会愿意用鼠标移到富文本编辑器的按钮上点一下
Markdown需要依赖什么需要一个Markdown到Html的转化工具,和一个额外的用于保存Markdown原文的存储空间,以备修改所需。这里推荐使用Editor.md,所见即所得。
......
-
GraphQL是什么GraphQL是一种开源数据查询和操作语言,以及用于使用现有数据完成查询的运行时。 GraphQL是在2012年由Facebook内部开发,然后在2015年公开发布。它提供了一种更高效,更强大,更灵活的REST和ad-hoc Web服务架构替代方案。
官方站点https://graphql.cn/
官方说明一种用于 API 的查询语言GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。
GraphQL的优点相比REST风格接口,GraphQL的优点主要有两个:一次请求完成多个REST接口的工作但是这一点通过整理RESTful接口同样可以实现,但这需要为每一类功能定制一个RESTful接口,同时RESTful接口返回的数据量显然是大于请求端所需的量,造成带宽浪费。定制化的返回数据由于上述第1点,GraphQL请求的数据可以由调用端定制返回的数据,依据是GraphQL的Schema文件
GraphQL的Java实现Facebook提供的仅仅是GraphQL Schema文件及查询语句的语法,并提供了一个基于Node.js的参考实现。graphql-java是参照Node.js版本实现的Java版本,是当前比较靠谱的GraphQL Java实现方案。
-
DataFetchingEnvironment的方法<T> T getSource();获取返回对象<T> T getRoot();获取返回对象,top levelMap<String, Object> getArguments();boolean containsArgument(String name);<T> T getArgument(String name);获取查询参数<T> T getContext();自定义context,可在整个query期间保持不变GraphQLFieldDefinition getFieldDefinition();List<Field> getFields();Field getField();GraphQLOutputType getFieldType();ExecutionTypeInfo getFieldTypeInfo();GraphQLType getParentType();GraphQLSchema getGraphQLSchema();Map<String, FragmentDefinition> getFragmentsByName();ExecutionId getExecutionId();DataFetchingFieldSelectionSet getSelectionSet();ExecutionContext getExecutionContext();
DataFetchingFieldSelectionSet用于判断查询内容,可以使用通配符
DataFetcher smartUserDF = new DataFetcher() {
@Override
public Object get(DataFetchingEnvironment env) {
String userId = env.getArgument("userId");
......
-
DataFetcher用于获取数据动态获取可使用匿名实现DataFetcher
environment -> rockmanService.getHerosFromSeries(environment.getArgument("series"))
静态内容可使用静态实现类StaticDataFetcher
TypeResolver为SDL的Interface或Union设置TypeResolver,用于泛型的向下转型
new TypeResolver() {
@Override
......
-
数据类型定义Scalar: 基本类型Object: 对象Interface: 接口Union: 联合InputObject: input CharacterEnum: 枚举类型
基本类型定义Java基本类型: GraphQL在Java对应的基本类型类String: GraphQLStringBoolean: GraphQLBooleanInteger: GraphQLIntegerFloat: GraphQLFloatID: GraphQLID // 这个比较特别,支持多种类型Long: GraphQLLongShort: GraphQLShortByte: GraphQLByteBigDecimal: GraphQLBigDecimalBigInteger: GraphQLBigInteger
-
语法schema 定义查询入口type 定义类enum 枚举interface 接口implements 实现[foo] 数组! 非空union Character = Doctor | Hunter 即反向的interfaceinput Character 输入对象?extend type Human 在原有定义上添加属性,常用于top level
示例文件// 这个是top node,标识入口
schema {
query: QueryType
}
// 入口支持的查询类型
......
-
GitHub地址https://github.com/graphql-java/graphql-java
官方文档https://graphql-java.readthedocs.io/en/latest/
graphql-java的一些辅助Git项目https://github.com/graphql-java/awesome-graphql-java
集成很简单,根据官方文档集成即可,我使用的是Maven集成
<dependency>
<groupId>com.graphql-java</groupId>
......