最近几年,Java 随着技术栈的快速发展,数百种技术工具不断涌现,这也造成了一个问题:

作为开发者,我们应该选择哪些工具来建造最合适的技术栈?

今日我就为大家推荐一波我经常使用的工具和框架。

一、项目工具
1.1 IDE
主流的 Java 现在开发工具不是 IntelliJ IDEA 莫属。几年前,可能 Eclipse 还能和 IDEA 一争高下,到现在已经基本上是了 IDEA 的天下了。

以我自己为例。我第一次用它。 IDEA,后来用了几年 Eclipse,后来又用回来了 IDEA。

包括我周围的程序员,以前用过 Eclipse 近年来,许多人被取代 IDEA 了。

假如你问我用 IDEA 到底哪个最爽,我觉得有 3 点:

智能代码提示,酷!
代码自动生成,酷!
代码调试,酷!
而这 3 点,可以大大提高程序员的开发效率 3 点。所以建议做 Java 可以优先考虑后端开发的程序员 IDEA 作为开发工具。

耀信单透软件哪家强

1.2 版本管理工具
对于项目中的代码版本管理工具,Git 已经处于垄断地位,不需要考虑新项目。 SVN、CVS了。

之所以 Git 现在处于垄断地位,主要胜于 2 点:

Git 它是分布式的,完整的代码历史版本不会因为版本管理服务器的崩溃而丢失。

Git 创建分支是一个非常便宜的操作,可以随意创建分支,使平行开发容易着陆。和 SVN、CVS 创建这些版本管理工具的分支非常笨拙,并行开发非常麻烦。

上述第 1 大大提高了代码资产的安全性和可靠性;第 2 点完美地满足了当代敏捷发展的需要。因此,Git 大行其道并不奇怪。

耀信机器人那家强

1.3 构建工具
Java 现在项目的建设工具是龙争虎斗,业内一般有两种选择:Maven 和 Gradle。

假如是后端 Java 项目,大部分还是用的。 Maven 建设项目。如果是前端 Android 选择项目 Gradle。

Gradle 本身要比 Maven 先进:配置灵活,性能优异,是一种非常优秀的施工工具。

那为什么在后端呢? Java 项目建设时,大部分仍在使用 Maven 呢?

由于Gradle本身过于灵活,这种灵活性带来了两个与后端项目建设特性不匹配的问题:

Gradle 由于灵活性,使用规则多变,导致学习门槛过高——后端项目本身的施工过程比较死板,变化很小,所以不需要太多的施工特点和规则。也就是说,灵活引入的各种用法、规则和特点对后端项目意义不大。为了使用施工工具本身,投入时间学习,性价比不高。

正如上面提到的,后端项目本身的建设过程相对常规,需要一些强烈的约束,以确保该常规的可靠性和稳定性。而 Gradle 由于其灵活的配置规则,它失去了 Maven 这种强烈的约束很可能会因为失去约束而导致团队使用 Gradle 在这种情况下,出现了各种冲突和潜在的错误,导致项目建设不稳定,这对后端项目来说是得不偿失的。

二、开发框架
2.1 Web 框架
现在的 Web 大部分项目开发都转向了 SpringBoot 了。使用 SpringBoot 最大的好处有三个:

配置很少,可以说是即插即用
基于 Spring 施工,入门门槛很低
不需要考虑直接操作 Web 容器的问题
SpringBoot 大多数人都很熟悉,不再重复了。

2.2 持久层框架
项目开发中使用的持久框架基本上有两种:

Mybatis 衍生框架系列
JPA 衍生框架系列
在中国,大多数持久框架仍然是首选 Mybatis,似乎大多数国外项目都是用来的 JPA 框架。

在我看来,互联网项目,toC 更适合的项目 Mybatis,toB 更适合的项目 JPA。

toC 项目的业务需求往往是灵活的,所以往往需要项目的技术灵活多变,而Mybatis本身就是 SQL 简单的包装,很容易添加表格和字段,改变SQL。

而 toB 项目不同,需求基本稳定,设计好的数据模型不会频繁变化,不需要 Mybatis 相反,灵活性需要对随机修改模型进行一系列强烈的约束。这也是 JPA 自身特点:非常规范,有很多约束,需要改变 JPA 成本较高的数据模型。

因此,在选择持久框架时,应根据实际情况选择项目的特点 Mybatis 还是 JPA。

2.3 RPC 框架
现在 Java 项目结构基本转向分布式结构。分布式系统集成的核心是 RPC,所以很多项目都被引入了 RPC 框架。

RPC 框架,现在用的比较多 Dubbo 框架。

Dubbo 性能很好:

很多 RPC 框架底部使用的通信协议是 HTTP,而 Dubbo 则选择了 TCP 协议作为通信协议。仅在性能方面,TCP 性能必须比较 HTTP 好上许多。

而且 Dubbo 大量使用自己 NIO 进一步优化了异步编程的性能。

因此,如果需要在项目中使用 RPC,可以先考虑 Dubbo 框架。

三、中间件3.1 Web 服务器
现在的 Java 由于大部分的开发,它被使用 SpringBoot,所以我们以前常用什么? Tomcat、Jetty、Resin 等 Web 容器不是单独部署使用的。

但是,有一个 Web 相反,容器越来越繁荣,这就是 Nginx。

Nginx 在 Java 在项目开发中,地位非常特殊。它在 Java 在项目架构中发挥了两个作用:

处理静态资源要求的web容器——Nginx 在 Java 在项目中,专门负责处理图片,html、js、css等静态资源 Http 请求。

反向代理分发-除了处理静态资源请求外 Web 容器之外,Nginx 同时也是对的 servlet、controller 等待这些动态资源的要求,转发给后面 SpringBoot 中内置的 Tomcat 容器。

多说一句,因为反向代理的特点,Nginx 集群将部署在后面,Nginx 在转发请求时,还将成为负载均衡请求分发的反向代理。

3.2 消息队列
如今,人们越来越倾向于分布式架构。在分布式架构中,除了网络请求外,常用的通信手段是消息队列。

现在主流的消息队列框架有 RabbitMQ、RocketMQ、Kafka 等。

我以前写过一篇 RabbitMQ 和 Kafka 对比文章:

懵了,Kafka、RabitMQ到底选哪一个?

RabbitMQ 虽然性能较低,但使用方便,更适合中小型项目。

此外,如果你在金融领域做相关项目,你可以优先考虑消息队列 RabbitMQ,原因如下:

RabbitMQ 是 AMQP 协议的实现,而 AMQP 协议本身是由金融行业的软件专家共同制定的,非常成熟和全面,已成为行业标准。

RabbitMQ 是 Erlang 写的,Erlang 虚拟机对内存和 CPU 过载保护非常成熟,因此塑造了它 Erlang 应用本身的可靠性和强度。

大型项目,非金融项目,每个人都可以 RocketMQ、Kafka 两者之间的选择。

RocketMQ 和 Kafka 差不多 90% 功能和概念是相互关联的,但是 RocketMQ 在 Kafka 在理念的基础上进行了一些改进,更适用的业务场景也更加广泛。

在流数据处理方面,应优先考虑 Kafka,原因是 Kafka 流数据处理生态更加完善全面。

3.3 数据库
MySQL是互联网领域的主流数据库。在一些传统行业,如银行,Oracle 用的不少。

Oracle 贵,互联网项目的一个特点是数据库服务器数量小偷多,如果使用 Oracle 成本太高了。

而且,每个人都有越来越多的版权意识,国家也越来越关注这方面。因此,它几乎被用于互联网领域 MySQL。

使用 MySQL,常见的有 MHA 方案——MySQL 高可用性方案的基本结构是一主两从。当主机出现故障时,从机器将升级为主机。

3.4 外置缓存
对于高并发架构,外部缓存是必不可少的,其中最常见的是 Redis。

每个人都采用它的原因 Redis 外部缓存有三个原因:

Redis 性能本身就很好。

Redis 适应不同业务缓存需求的数据结构很多。

Redis 集群高可用性方案和分片存储高性能方案相对成熟。

以上,就是 Java 主流技术工具在开发中经常遇到。

由于篇幅有限,我只列出了一些核心工具和中间件(或每个人都会使用)。

有一些重要的中间件,我认为不是每个人都会使用,所以没有提到,例如 ElasticSearch、MongoDB、Zookeeper 等待(以后写文章介绍给大家)。

希望这篇文章能对大家有所帮助,帮助大家快速准确地找到当今的主流技术工具,提高开发效率。