CreateArtTechnology / Blog
  • Java在线诊断工具Arthas介绍
     17     2019-07-19 20:54:56

    Arthas
    Arthas是什么
    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
    这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
    ——Arthas中文说明文档
    前几天遇到了一个这样的场景:
    ......

    共3张

  • ElasticSearch介绍
     3     2018-10-11 18:34:51

    分页系统有问题,有from和size,但会将from+size数据全部读入内存中,导致不能大规模取数据默认from+size不能超过10000es建议只作为条件查找工具,不推荐作为大规模读取工具

  • Jenkins部署
     2     2018-09-26 23:55:00

    部署流程Jenkins部署非常简单,推荐两种方案
    下载-运行jar下载-部署tomcat
    下载官网下载war包运行jar
    java -jar jenkins.war
    等待几秒后Jenkins启动成功,访问http://localhost:8080/ ,会提示输入一串安全口令,以及这段口令保存的位置,之后根据提示操作即可。jar包运行很简单很方便,但是如果需要一些个性化配置还是用tomcat部署吧。部署tomcat将war包放在tomcat的webapp目录下,重启tomcat,tomcat会自动部署。

  • Jenkins介绍
     6     2018-09-26 23:49:08

    Jenkins
    Jenkins是什么
    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使持续集成变成可能。——搜狗百科
    Jenkins用来干什么我的理解,Jenkins的本质其实是crontab+shell脚本,也就是说通过crontab+shell可以实现的事情,可以很方便地通过Jenkins的GUI完成。比如,发布版本,线上监控报警,定时任务等等……
    Jenkins的优点http://www.jenkins.org.cn 的介绍是比较权威的,我个人使用之后感受最深的是这几点:
    易安装,这是真的,傻瓜式安装从下载完成到开始使用不到20s易配置,这也是真的,提供了比较友好的GUI,功能相对较为丰富,便于定制变更支持,说白了就是支持自动同步最新代码并编译,然后定制自己的操作流程
    ......


  • Editor.md集成
     5     2018-09-26 20:26:05

    下载1.通过GitHub或官方网站下载editor.md压缩包2.解压3.将需要的部分保存到网站静态资源目录4.在页面引用相关文件
    下载文件目录结构一般而言下载的文件是editor.md-master.zip
    editor.md-master
    tests // 测试文件
    src // 源文件
    scss // 一些css文件
    ......

  • Editor.md介绍
     4     2018-09-26 20:15:51

    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介绍
     3     2018-09-26 19:51:05

    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介绍
     3     2018-09-25 13:44:13

    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实现方案。

  • graphql-java中的细节补充
     2     2018-09-25 14:33:06

    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
    ......

  • graphql-java的数据类型
     7     2018-09-25 14:18:46

    数据类型定义Scalar: 基本类型Object: 对象Interface: 接口Union: 联合InputObject: input CharacterEnum: 枚举类型
    基本类型定义Java基本类型: GraphQL在Java对应的基本类型类String: GraphQLStringBoolean: GraphQLBooleanInteger: GraphQLIntegerFloat: GraphQLFloatID: GraphQLID // 这个比较特别,支持多种类型Long: GraphQLLongShort: GraphQLShortByte: GraphQLByteBigDecimal: GraphQLBigDecimalBigInteger: GraphQLBigInteger

  • SDL Schema文件
     4     2018-09-25 14:16:33

    语法schema 定义查询入口type 定义类enum 枚举interface 接口implements 实现[foo] 数组! 非空union Character = Doctor | Hunter 即反向的interfaceinput Character 输入对象?extend type Human 在原有定义上添加属性,常用于top level
    示例文件// 这个是top node,标识入口
    schema {
    query: QueryType
    }
    // 入口支持的查询类型
    ......

  • graphql-java介绍和集成
     19     2018-09-25 14:10:33

    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>
    ......