idea 一直在build_让web开发部署提速 8 倍的一款 IDEA 插件,你有在用?

原文:http://suo.im/4on4JE  来源于云栖社区>中间件小哥

作为一个 Java 程序员,我们大多数会在 Intellij IDEA 中基于 SpringBoot 来开发 WEB 应用,所以本文中的测评将会基于以下几个架构来构建:

  • 开发环境:IDEA

  • 项目组织方式:Maven

  • 开发框架:SpringBoot

在接触 Cloud Toolkit 之前,用什么方法来部署一个 SpringBoot 应用呢?

作为一个偏正经的测评人员,我不会为了凸显出 Cloud Toolkit 的强大而去翻出一些上古的部署工具来做对比,而是直接使用 Intellij IDEA 的内置功能与之对比。

第一步:配置服务器信息

ecd66039423cb81740b5f89e9d4f04ad.png

在 Tools -> Deployment 中找到 IDEA 对项目部署支持的内置插件,我们可以在其中进行服务器信息的配置,包括服务器地址和权限认证,并且在 Mapping 选项卡中完成本地工程与服务器路径的映射。

第二步:配置 Maven 打包插件

<build>  <plugins>    <plugin>      <groupId>org.springframework.bootgroupId>      <artifactId>spring-boot-maven-pluginartifactId>    plugin>  plugins>build>

由于是 SpringBoot 应用,配置专用的打包插件后,可以将整个工程打成一个 fatjar,示例工程非常简单:

@SpringBootApplication
@RestController
public class Application {
   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
   }

   @RequestMapping("/hello")
   public String hello() {
     return "hello world~~~~~~~~~~~~~~~~";
    }
}

之后,只要执行 install,即可得到一个可运行的 jar 包:

7536d52cb50243a4ae8bc6231219aeef.png

第三步:部署 jar 包

9a503468c5cafd8b4b25856fc271eb6c.png

由于我们在第一步已经配置过项目路径与服务器路径的映射,可以选择直接对 fatjar 右键,upload 到远程服务器上。

第四步:启动应用

afb7568049e012e8f8800d9b78bd124a.png

上图中展示的是 IDEA 中两个非常棒的内置功能,可以在 Tools -> Start SSH session 中开启远程服务器的终端,在 IDEA 下方可以执行远程指令;

也可以在 Tools -> Deployment ->Browse Remote Host 中展开如图右侧的结构,可视化地浏览服务器上的文件列表,检查应用是否部署成功。

在远程终端中,找到对应的 fatjar,执行 java -jar spring-demo-1.0-SNAPSHOT.jar 便完成了整个部署流程。

IDEA 内置插件总结

IDEA 内置插件已经提供了相当强大的能力,整个部署过程我们完全没有离开 IDEA!

避免了频繁切换窗口,装各种部署工具,可以说已经很方便了,Cloud Toolkit 必须要比这个部署过程做的更加强大才行,那下面就让我们来体验下 Cloud Toolkit 是怎么优化的吧。

Cloud Toolkit 初体验

7e3d57808a87a93903d2141fa03b0de0.png

其他菜单项暂且抛到一边,这 5 个核心能力应该就是 Cloud Toolkit 的核心了。

即使作为一个插件小白,应该也能够望名知意,猜到这几个菜单对应的功能:

  • Deploy to Host:部署到任意服务器。

    这一个功能决定了 Cloud Toolkit 强大的之处就是可以使得每个开发者受益,它其实并不是和阿里云厂商强绑定的。我会在下文重点测评下这个功能。

  • Deploy to ECS:这里的 ECS 指的阿里云的 ECS,如果你的服务部署在阿里云 ECS 上,可以选择使用这个功能,获得比 Deploy to Host 更加丰富的功能。

    在下文我也会简单测评下这个功能。

  • Deploy to EDAS & EDAS Serverless:EDAS & EDAS Serverless 是阿里云提供的分布式服务治理服务,可以理解为商业版的 Dubbo,具有强大的服务治理、服务调度能力,Cloud Toolkit 对 EDAS 做了个性化的部署支持,让使用者无需登录控制台,在 IDEA 中即可完成 EDAS 的部署。

  • Deploy to CS K8S:在云原生时代,很多应用使用容器化的方式进行部署,Cloud Toolkit 这一点做的还是不错的,已经具备了容器化部署的能力,具有一定的前瞻性。

其实从简单的功能介绍就可以看出,Cloud Toolkit 相比 IDEA 内置的部署能力的确是高出一大截了,甚至可以说,Deploy to Host 这一能力完全就可以覆盖 IDEA 插件的所有能力,并且对流程还进行了一些简化。

下面我重点测评下 Deploy to Host 这一能力,与之前的部署流程进行一个对比。

使用 Cloud Toolkit 把应用部署到任意服务器

5d786477d509c57c340c966a4534cf1c.png

上图展示的 Deploy to Host 功能的配置项,实际上涵盖了以下几点:

  • 远程服务器配置

  • 部署方式:Maven 构建,直接上传文件(目前还不支持 Gradle 构建,可能在后续的版本会支持)

  • 本地文件与服务器路径的映射配置

  • 启动脚本的集成

账号管理

SSH 登录账户可以在 Preferences -> Alibaba Cloud Toolkit -> SSH Profile 中管理,找不到也没关系,需要设置的时候一般都会有超链接跳转,这点做得很人性化。

6dface784134cd8f4e4605b81ee0daac.png

主机管理

服务信息可以在 Tools -> Alibaba Cloud ->Alibaba Cloud View 中展开,如下图所示:

a492628856445ab46789edd0872b3f37.png

Deploy to Host

配置完账号信息和主机信息,接下来只需要右键项目选择 Alibaba Cloud -> Deploy to Host-> Run  ,一切就搞定了。这个过程相比之前变得非常简易:

  • 不需要自己打包,Cloud Toolkit 集成了 Maven 插件。

  • 不需要登录远程终端去执行脚本启动服务,Cloud Toolkit 提供了应用部署生命周期必要的钩子,只需要设置好启动脚本即可。

  • 修改完本地代码,点击下 Deploy to Host,即可完成改动代码的部署。

经过如上的测评过程,相信即使没有使用过 Cloud Toolkit 的用户,也可以直观体会到这是一款怎么样的插件了,并且它的功能是多么的实用。

使用 Cloud Toolkit 把应用部署到 ECS

从产品设计的角度来分析,Cloud Toolkit 提供如此多的部署能力,可以想到是其直接预设了使用人群。

例如一个阿里云的 ECS 用户,在选择部署方式时,既可以使用 Deploy to Host 也可以使用 Deploy to ECS;

再者,例如一个 EDAS 用户,在选择部署方式时,既可以使用 Deploy to Host、Deploy to ECS,也可以使用 Deploy to EDAS(EDAS 可以理解为一个定制化的 ECS)。

从产品的角度,越定制化的功能,其服务的人群越少,同时功能更强大;

从用户体验的角度,其实也透露了云服务的一个特点,云厂商正在为其所提供的云服务创造更好的用户体验,借助于此类插件,来降低使用者的开发运维门槛。

可以预见的一件事是,对于非阿里云用户来说,Deploy to Host 是他们使用 Cloud Toolkit 最大的诱惑了。作为一个测评文章,除了介绍 Deploy to Host 之外,我还选择了 Deploy to ECS 这一功能来进行测评。为此我购买了一台阿里云的 ECS 来部署与上文相同的应用。

0165e87fa2279e7db34b8ad5edcbf798.png

在阿里云控制台可以获取到账号的 Access Key/Access Key Secret,在 IDEA 中的 Preferences -> Alibaba Cloud Toolkit -> Accounts 中可以设置账号。

在账号设置完毕后,Cloud Toolkit 看起来是通过内置的 API 直接关联到了我的 ECS 实例,在选择部署时,可以直接根据 region 选择实例列表中的机器进行部署。

6dc08eafcc9ddd83178565f025609627.png

其余的部署流程和 Deploy to Host 相差无几。也就是说,其实 Deploy to ECS 更多的完成了权限管理和主机管理,ECS 用户使用这个功能就显得非常高效了。

Cloud Toolkit 的亮点功能

Cloud Toolkit 除了主打的部署能力,还提供了不少亮点功能,我选择了其中的 3 个功能来分享:上传文件、远程 Terminal、内置应用诊断功能来进行评测。

上传文件

34234f10798be89c758d2751eecdd347.png

有些脚本我们希望在本地编辑之后上传到服务器上,Cloud Toolkit 对每一个主机都提供了一个 Upload 操作,可以将本地的文件上传到远程主机上,并且还可以触发一个 commond,这个功能也是很人性化的,因为上传脚本后,往往需要运行一次,避免了我们再登录到远程主机上执行一次运行操作。

远程 Terminal

特别是在 Mac 系统中,我一直苦恼的一件事便是如何管理众多的远程机器,我偶尔需要去搭建了博客的主机上查看个人博客为什么挂了,偶尔又要去看看我的 VPN 主机排查下为什么无法转发流量了,在开发测试阶段,又要经常去测试主机上执行一些简单的命令。

所有这一切通过 ssh 工具去完成都不麻烦,但所有的麻烦事集合到一起时往往会让我变得焦头烂额,针对这一点,Cloud Toolkit 简直是一个 Life Saver。

02f80484abcc6284e8a23403dcff804d.png

事实上,在前面的测评中我们已经了解到 IDEA 内置了远程 Terminal 这个功能,Cloud Toolkit 是进一步优化了它的体验,用户可以直接在可视化的页面选择想要远程登录的主机,在对主机加了 Tag 之后,这个过程会更加直观。

内置应用诊断功能

在测评体验过程中,意外地发现了 Cloud Toolkit 的一个功能支持,就是前面的截图有显示,但我未提到的 Diagnostic (诊断)功能。

Cloud Toolkit 集成了阿里巴巴开源的一款应用诊断框架 --Arthas。

  • 对于本地主机,可以直接通过 Tools -> Alibaba Cloud -> Diagnostic Tools 开启诊断。

  • 对于远程主机,可以通过主机管理中的 Diagnostic 选项卡,开启远程诊断。

fce6f5ef0287cae79f006637e92bd63a.png

在过去,我们想要进行诊断,必须要手动在服务器上安装 Arthas,然而Cloud Toolkit 借助 Remote Terminal 和 Arthas 的集成,让这一切都可以在 IDEA 中完成,似乎是想要贯彻这个原则:彻底杜绝第三方工具,一切都用插件完成。

当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

  5. 是否有一个全局视角来查看系统的运行状况?

  6. 有什么办法可以监控到 JVM 的实时运行状态?

作为一个偏正经的评测,我们试用一下远程诊断的功能,选取比较直观的 trace 命令来进行评测。

2b666818e5ba4be7271fbb6aa666e155.png

如上图所示,我们构造了一个慢请求,其中 invokeServiceA_B() 相对于其他方法十分耗时,我们希望通过 Cloud Toolkit 定位到慢调用的源头,找出 invokeServiceA_B 这个罪魁祸首。

a4a91f14196447a7cf9cb2da3ab09e68.png

点击 IDEA 中对应部署服务器的 Diagnostic 菜单项,就会出现如上图所示的一个 Arthas 诊断页面,它会自动关联到用户的 Java 进程,用户只需要选择相应诊断的进程即可。

05c78935f5963eb6a38aa1f31665391d.png

在关联到相应的进程之后,我们执行 trace 指令 trace moe.cnkirito.demo.Application * -j

这个指令的含义是当 moe.cnkirito.demo.Application 中的任意方法被触发调用后,会打印出相应的调用栈,并计算耗时,-j 的含义是过滤掉 JDK 内置的类,简化堆栈。

正如上图所示,我们定位到是 invokeServiceA 的 invokeServiceA_B 最为耗时。

用户可以自行监控对应的方法,把 * 替换为想要监控的方式即可。(更多的监控指令可以参考 Arthas 文档链接:https://alibaba.github.io/arthas/)

 --完--

【源码+视频】SSM框架开发酒店管理系统,速度保存,手慢无!

【源码+视频】SSM框架实现的学生系统源码分享,速度保存,手慢无!

40633e32750a4b8bc0159234bdf6b75a.png

在看 563dfc1cf76166ada903d96d9cf0da42.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 调用12306接口,GitHub - AndroidyxChen/loading-12306: 仿PC端12306的刷新loading的自定义view...

loading-12306仿PC端12306的刷新loading的自定义view效果图&#xff1a;核心代码及实现逻辑如下&#xff1a;mPaint.setColor(mColor);mPaint.setTextSize(50);//1、动画开启前&#xff0c;theCircle的初始值为-1&#xff0c;所以初始化时只走canvas.drawCircle()方法&#xff…

FreeBSD 下的 MySQL 备份方案

作/译者&#xff1a;叶金荣&#xff08;Email: &#xff09;&#xff0c;来源&#xff1a;http://imysql.cn&#xff0c;转载请注明作/译者和出处&#xff0c;并且不能用于商业用途&#xff0c;违者必究。核心提示&#xff1a;如何在 FreeBSD 下实现 MySQL 的全量及增量备份&am…

IdentityServer4(八)使用EntityFramework Core对数据进行持久化

上几篇&#xff0c;我们创建了客户端&#xff0c;scope&#xff0c;启动时&#xff0c;IdentityServer把这些配置数据加载至内存&#xff0c;但是&#xff0c;如果我们想要更改配置&#xff0c;就必须停掉IdentityServer&#xff0c;然后重新启动。且IdentityServe在r运行过程中…

centos 重启网卡_CentOS7网络配置和修改网卡名称及常用服务管理命令

1.设置IP地址和网关及DNSCentOS7里面的网卡名称不在是eth0,1,2而改成enoxxxxxx的格式&#xff0c;en代表的是enthernet以太网&#xff0c;o代表onboard内置&#xff0c;这种新的方式不但长&#xff0c;而且难记&#xff0c;不过优点也比较突出&#xff0c;有编号唯一性&#xf…

C# 中的动态类型

翻译自 Camilo Reyes 2018年10月15日的文章 《Working with the Dynamic Type in C#》 [1] .NET 4 中引入了动态类型。动态对象使您可以处理诸如 JSON 文档之类的结构&#xff0c;这些结构的组成可能要到运行时才能知道。在本文中&#xff0c;Camilo Reyes 解释了如何使用动态…

python根据列表绘制柱状图_python把一个列表画柱状图

原博文 2018-10-18 14:28 − https://blog.csdn.net/w113691/article/details/80385534... 相关推荐 2019-12-07 19:38 − 用python画简单的树 代码如下&#xff1a; import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, t): time.sleep(0.00…

基于电子邮件的InfoPath表单发布的注意点 [Infopath 2007]

让我们先来看看InfoPath 2007提供的其他几种发布方案&#xff1a;1. 将InfoPath模板发布到SharePoint Server或者InfoPath Form Server2. 将InfoPath模板制作成一个安装程序3. 将InfoPath模板发布到一个共享网络地址上方案1,3 都必须依赖已有服务器或网络&#xff0c;而方案2 则…

如何在 C# 8 中使用 Index 和 Range

C# 8 中有几个比较好玩的新特性&#xff0c;比如下面的这两个&#xff1a;System.Index 和 System.Range&#xff0c;分别对应着索引和切片操作&#xff0c;这篇文章将会讨论这两个类的使用。System.Index 和 System.Range 结构体 可以用它们在运行时对集合进行 index 和 slice…

Hybrid-APP技术原理

源宝导读&#xff1a;Hybrid-APP技术不仅具有“Native APP的良好交互体验”同时也具备“Web APP跨平台开发的优势”。既然Hybrid-APP有这么多优势&#xff0c;那么究竟什么样的APP才算Hybrid App呢&#xff1f;本文将分享我们的技术研究成果。一、什么是Hybrid-APP狭义的Hybrid…

基于微软ASP.NET AJAX框架开发幻灯片播放网页

一、 简介 最近&#xff0c;微软ASP.NET Ajax 1.0框架以其完整的基于Ajax的web开发方案呈现在web技术人员的前面&#xff0c;凭借与遗留ASP.NET系统的有机整合以及完全面向对象的客户端JavaScript组件模型两大绝杀正在引起越来越多的基于.NET平台的web开发者的关注。本文应该属…

推荐:.Net 5开源免费的内容管理系统

背景介绍内容管理系统&#xff08;content management system&#xff0c;CMS&#xff09;是一种位于WEB 前端&#xff08;Web 服务器&#xff09;和后端办公系统或流程&#xff08;内容创作、编辑&#xff09;之间的软件系统。内容的创作人员、编辑人员、发布人员使用内容管理…

河南信息工程学校计算机组装比赛,计算机技术系承办2019全员化试点项目计算机网络装调赛项...

2019年10月16日&#xff0c;由河南省教育厅主办、河南省职业教研室承办的技能竞赛全员化试点项目“计算机网络装调”赛项在河南信息工程学校开赛&#xff0c;来自全省37所学校的96名选手同台竞技&#xff0c;和谐交流。“计算机网络装调”赛项是2019年河南省中职教育技能竞赛的…

限制IIS站点的内存,避免级联影响

背景 代码写的有问题&#xff0c;会很容易出现内存泄露的问题。应用如果是部署在docker容器里面的&#xff0c;可以限制这个应用的内存。那么&#xff0c;如果是传统的.NET Framework应用&#xff0c;部署在IIS上面呢&#xff1f;老黄曾经遇到过在一台服务器上面&#xff0c;II…

笔记本怎么查看hdmi版本_涨知识丨一文看懂笔记本电脑HDMI接口

上一期文章我们同大家简单介绍了笔记本电脑Type-C接口及其日常用途&#xff0c;今天我们来聊聊笔记本电脑上另一个常备的电脑接口HDMI&#xff0c;它究竟是什么&#xff0c;有哪些用途&#xff0c;我们一一为您揭晓&#xff01;如图所示&#xff0c;有着HDMI标识的接口就是我们…

中小企业CRM评测-用户交互_易客

用户交互<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />如何评测在这个部分我们应用了用户接口易用性方面的几种测试方法&#xff0c;以客观的评估参测产品在用户接口设计方面的素质。物理操作负担主要是由参测产品完成一组既定…

pdf编辑软件adobe acrobat_分享一款PDF编辑和阅读软件Acrobat

Adobe Acrobat介绍是一款非常好用且功能强大的PDF编辑和阅读软件。可以对PDF文件进行查看、添加注释、填写、签名并发送之外&#xff0c;同时还可以使用一些高级工具来创建、编辑、导出和组织PDF&#xff0c;以及将任何内容转换为高质量的PDF&#xff0c;并在任何屏幕上完美呈现…

诈尸了。不瞒您说,老坑从不填,天天开新坑

诈尸了。你的年更 UP 诈尸了。不瞒您说&#xff0c;我其实有好多乱七八糟的东西想往外捯饬捯饬整理整理。写过博客&#xff0c;发过公众号&#xff0c;做过视频。但是这些对我整理分享知识来说都有一个硬伤&#xff1a;慢。而咱们 IT 工作者&#xff08;哦&#xff0c;还有培训…

打开计算机任务栏有桌面没,电脑桌面任务栏不显示打开的窗口怎么办

我们在使用电脑的时刻&#xff0c;会遇到林林总总的问题&#xff0c;有时刻我们就会遇到我们在桌面打开了一个页面&#xff0c;然则电脑桌面下方的任务栏却不显示打开的窗口&#xff0c;那这是怎么回事呢&#xff1f;我们想要任务栏显示打开的窗口又该怎么做呢&#xff1f;今天…

Visual Studio将原生支持WSL 2

喜欢就关注我们吧&#xff01;近日&#xff0c;微软官方宣布旗下的集成开发环境 Visual Studio 将原生支持 WSL 2&#xff0c;这意味着 VS 用户可以在 WSL 2 上进行无缝构建和调试&#xff0c;而无需添加 SSH 连接&#xff0c;提升运行效率。据悉&#xff0c;微软曾在 2019 年将…

python删除符合条件的行_这十道经典Python笔试题,全做对算我输

经常有小伙伴学了Python不知道是否能去找工作&#xff0c;可以来看下这十道题检验你的成果&#xff1a;1、常用的字符串格式化方法有哪些&#xff1f;并说明他们的区别a. 使用%&#xff0c;语法糖print("我叫%s&#xff0c;今年%d岁" % ("oxs", 18)) # 我叫…