更效率、更优雅 阿里巴巴开发者工具不完全盘点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更效率、更优雅 阿里巴巴开发者工具不完全盘点相关的知识,希望对你有一定的参考价值。
参考技术A
从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展。
阿里巴巴将自身在各类业务场景下的技术积淀,通过开源、云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率、更优雅的写代码。
由于开发者涉及的技术领域众多,笔者仅从自己熟悉的领域,以后端开发者的视角盘点平时可能有得到的工具。每个工具按照以下几点进行介绍:
Arthas 阿里巴巴2018年9月开源的一款Java线上诊断工具。
工具的使用场景:
Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
使用教程:
基础教程:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-basics
进阶教程:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced
获取方式:(免费)
开源地址:https://github.com/alibaba/arthas
Cloud Toolkit 是一款 IDE 插件,可以帮助开发者更高效地开发、测试、诊断并部署应用。通过 Cloud Toolkit,开发者能够方便地将本地应用一键部署到任意机器(本地或云端),并内置 Arthas 诊断、高效执行终端命令和 SQL 等。
工具的使用场景:
每次修改完代码后,是否正在经历反复地打包?在 Maven 、Git 以及其他运维脚本和工具的之间频繁切换?
采用 SCP 工具上传?使用XShell或SecureCRT 登陆 服务器?替换部署包?重启?
文件上传到服务器指定目录,在各种 FTP、SCP 工具之间频繁切换 ?
使用教程:
获取方式:(免费)
工具地址:https://www.aliyun.com/product/cloudtoolkit
ChaosBlade 是一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入,提供了延迟、异常、返回特定值、修改参数值、重复调用和try-catch 块异常等异常场景。
工具的使用场景:
使用教程:
https://github.com/chaosblade-io/chaosblade/wiki/新手指南
获取方式:(免费)
开源地址:https://github.com/chaosblade-io/chaosblade/wiki/新手指南
该插件用于检测 Java 代码中存在的不规范的位置,并给予提示。规约插件是采用kotlin语言开发。
使用教程:
IDEA插件使用文档:
https://github.com/alibaba/p3c/wiki/IDEA插件使用文档
Eclipse插件使用文档:https://github.com/alibaba/p3c/wiki/Eclipse插件使用文档
获取方式:(免费)
开源地址:https://github.com/alibaba/p3c
ARMS 是一款 APM 类的监控工具,提供前端、应用、自定义监控 3 类监控选项,可快速构建实时的应用性能和业务监控能力。
工具的使用场景:
使用教程:
前端监控接入:https://help.aliyun.com/document_detail/106086.html
应用监控接入:https://help.aliyun.com/document_detail/63796.html
自定义监控:https://help.aliyun.com/document_detail/47474.html
获取方式:(收费)
工具地址:https://www.aliyun.com/product/arms
Docsite 一款集官网、文档、博客和社区为一体的静态开源站点的解决方案,具有简单易上手、上手不撒手的特质,同时支持 react 和静态渲染、PC端和移动端、支持中英文国际化、SEO、markdown文档、全局站点搜索、站点风格自定义、页面自定义等功能。
使用教程:
https://docsite.js.org/zh-cn/docs/installation.html
获取方式:(免费)
项目地址:https://github.com/txd-team/docsite
Freeline 可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。Freeline 最快捷的使用方法就是直接安装 android Studio 插件。
使用教程:
https://github.com/alibaba/freeline/blob/master/README-zh.md
获取方式:(免费)
项目地址:https://github.com/alibaba/freeline
PTS 可以模拟大量用户访问业务的场景,任务随时发起,免去搭建和维护成本,支持 JMeter 脚本转化为 PTS 压测,同样支持原生 JMeter 引擎进行压测。
使用教程:
https://help.aliyun.com/document_detail/70290.html
获取方式:(收费)
工具地址:https://www.aliyun.com/product/pts
KT 可以简化在 Kubernetes 下进行联调测试的复杂度,提高基于Kubernetes的研发效率。
使用教程:
https://yq.aliyun.com/articles/690519
获取方式:(免费)
工具地址:
https://yq.aliyun.com/download/3393
AHAS 为 K8s 等容器环境提供了架构可视化的功能,同时,具有故障注入式高可用能力评测和一键流控降级等功能,可以快速低成本的提升应用可用性。
工具的使用场景:
使用教程:
https://help.aliyun.com/document_detail/90323.html
获取方式:(免费)
工具地址:
https://www.aliyun.com/product/ahas
作者:中间件小哥
取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高
作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper。
Mybatis Generator 是 MyBatis 官方提供的一个代码生成工具,完全可以胜任这个工作,不过最近在开发“编程猫”开源网站的时候试用了一下 MyBatis-Plus 官方提供 AutoGenerator,发现配置更简单,开发效率更高!于是就来给小伙伴们安利一波。
来个 GIF 感受一下 AutoGenerator 生成代码的快感吧。
一、使用 Mybatis Generator
为了形成鲜明的对比,我们先来使用 Mybatis Generator 生成一次代码,感受一下整个过程。
第一步,在 pom.xml 文件中添加 MySQL+MyBatis 的依赖(Mybatis Generator 的前置条件)。
<!-- MySQL 连接池 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>$mysql.version</version>
</dependency>
<!--MyBatis 的 Spring Boot starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
添加完成后,一定要执行一次 Maven 重载(见下图),确保 MyBatis 的依赖加载完毕后再执行第二步。
否则下一步可能不通过,但又得不到任何错误提示。不要问我为什么,踩过坑后痛苦的领悟。
添加完成后,可以通过 Maven 插件来生成代码,也可以通过 Java 代码来生成代码,这里以 Maven 插件的形式来演示。Java 代码的形式可参照 Mybatis Generator:
https://mybatis.org/generator/running/runningWithJava.html
第二步,在 pom.xml 的 MyBatis Generator 插件,先来看一下整体的结构图,注意是在 build→plugins 下节点下添加。
首先是 MyBatis Generator 插件,目前最新版是 1.4.0,我们采用上一个稳定版本 1.3.7,稳一点。
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
只添加插件还不够,还需要对其进行配置,我们使用 configurationFile 元素来指定一个配置文件 mybatis-generator-config.xml:
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
来看一下 mybatis-generator-config.xml 的内容。
<generatorConfiguration>
<context id="myContext" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 注释 -->
<commentGenerator>
<!-- 是否不生成注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- jdbc连接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false"
userId="codingmoretiny02"
password="123456">
<!--高版本的 mysql-connector-java 需要设置 nullCatalogMeansCurrent=true-->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 类型转换 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true"/>
</javaTypeResolver>
<!-- 生成实体类地址 -->
<javaModelGenerator targetPackage="com.codingmore.mbg.po" targetProject="src/main/java">
<!-- 是否针对string类型的字段在set方法中进行修剪,默认false -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成Mapper.xml文件 -->
<sqlMapGenerator targetPackage="com.codingmore.mbg.mapper" targetProject="src/main/resources">
</sqlMapGenerator>
<!-- 生成 XxxMapper.java 接口-->
<javaClientGenerator targetPackage="com.codingmore.mbg.dao" targetProject="src/main/java" type="XMLMAPPER">
</javaClientGenerator>
<table schema="" tableName="user" domainObjectName="User"
enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
enableUpdateByExample="false" selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
- 配置文件至少得包含一个context
- commentGenerator 用来配置生成的注释
- jdbcConnection 用来链接数据库
- javaTypeResolver 配置 JDBC 与 Java 的类型转换规则
- javaModelGenerator 配置 po 生成的包路径和项目路径
- sqlMapGenerator 配置 mapper.xml 文件生成的目录
- javaClientGenerator 配置 mapper.java 文件生成的目录
- 一个 table 对应一张表,如果想同时生成多张表,需要配置多个 table
更多配置信息可以参照下面这篇文章:
https://juejin.cn/post/6844903982582743048
由于数据库表可能会发生变动,因此我们需要追加一个配置 <overwrite>true</overwrite>
,允许覆盖旧的文件。为了防止我们编写的 SQL 语句被覆盖掉,MyBatis Generator 只会覆盖旧的 po、dao、而 *mapper.xml 不会覆盖,而是追加。
Mybatis Generator 需要链接数据库,所以还需要添加数据库驱动依赖,就像这样:
<configuration>
</configuration>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>$mysql.version</version>
</dependency>
这样就会显得比较冗余,因为我们之前添加过了。好在 Maven 提供了 includeCompileDependencies 属性,可以让我们在插件中引用之前添加的依赖。
<includeCompileDependencies>true</includeCompileDependencies>
到此为止,mybatis-generator-maven-plugin 就算是配置完成了,完整内容如下所示:
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<overwrite>true</overwrite><includeCompileDependencies>true</includeCompileDependencies>
</configuration>
</plugin>
</plugins>
</build>
配置完成后可以双击运行 Maven 的插件 Mybatis Generator,没有问题的话,可以看到生成后的文件。
二、使用 MyBatis-Plus 的 AutoGenerator
MyBatis-Plus(简写 MP)是 MyBatis 的增强工具,官方宣称 MP 和 MyBatis 的关系就好像魂斗罗中的 1P 和 2P,可谓好基友,天下走。
AutoGenerator 是 MyBatis-Plus 推出的代码生成器,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,比 Mybatis Generator 更强大,开发效率更高。
通过前面的体验,想必大家确实感觉到了 Mybatis Generator 的繁琐,接下来,我们来体验一下 AutoGenerator,对比过后,大家心里就有答案了。
第一步,在 pom.xml 文件中添加 AutoGenerator 的依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
第二步,添加模板引擎依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,这里使用默认的 Velocity 引擎。
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
第三步,进行全局配置。
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("沉默王二");
gc.setOpen(false);
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);
gc.setIdType(IdType.AUTO);
第四步,配置数据源。
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("codingmoretiny02");
dsc.setPassword("123456");
第五步,配置包。
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("top.codingmore.mpg");
更多配置项可以到官方查看:
https://baomidou.com/pages/061573/
示例代码示例如下所示:
public class CodeGenerator
public static void main(String[] args)
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("沉默王二");
mpg.setGlobalConfig(gc);
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
mpg.setDataSource(dsc);
mpg.execute();
再来看一下运行后的效果,可以看到数据库表对应的 controller、service、entity、mapper 等等全有了——爽歪歪:
三、总结对比
对比 Mybatis 的 Generator 和 MyBatis-Plus 的 AutoGenerator,就可以得出这样一条结论:后者的配置更简单,开发效率也更高,功能也更强大——可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码。
MyBatis-Plus 的确配得上 Plus 啊,确实优秀。
想要完整示例的话,可以到 GitHub 上查看:
https://github.com/itwanger/codingmore-learning/tree/main/codingmore-tiny-02
本篇已收录至 GitHub 上星标 1.5k+ star 的开源专栏《Java 程序员进阶之路》,该专栏风趣幽默、通俗易懂,对 Java 爱好者极度友好和舒适😄,内容包括但不限于 Java 基础、Java 集合框架、Java IO、Java 并发编程、Java 虚拟机、Java 企业级开发(Git、SSM、Spring Boot)等核心知识点。
https://github.com/itwanger/toBeBetterJavaer
star 了这个仓库就等于你拥有了成为了一名优秀 Java 工程师的潜力。也可以戳下面的链接跳转到《Java 程序员进阶之路》的官网网址,开始愉快的学习之旅吧。
没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。
以上是关于更效率、更优雅 阿里巴巴开发者工具不完全盘点的主要内容,如果未能解决你的问题,请参考以下文章
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)