百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

为了“降本增效”,我用AI 5天将SpringBoot迁移到了Nodejs

mhr18 2025-04-26 19:35 39 浏览 0 评论

背景

大环境不好,各行各业都在流行“降本增效”,IT行业大肆执行“开猿节流”,一顿操作效果如何?普通搬砖人谁会在乎呢。

为了收紧我的口袋,决定从头学习Nodejs+TypeScript,来重写我的Java后端服务。

其实这波操作并不是仅仅为了实操Nodejs,更主要的原因是为了运行我的几个Java项目,服务器开支还是有点超预期了。其中最主要的原因就是Java开发的服务太占用系统内存了。

我目前自己开发的项目有:易登、易支付、云仓库管、AI BOT、记忆旅途博客、万巷聚合推广平台,这些一个个Java作为后端服务的项目让我不得不买了两个云服务器,一年成本着实不小。

我最开始做的是记忆旅途博客,当时1C2G的服务器足够了。但是随着需求的增多,相关项目也就一个个拔地而起。根据统计平均每个项目占用内存600MB左右,看的我心里真是有点着急。虽说的主业就是Java开发,但是在money面前,我还是通过一次次的比对,决定要重写一部分项目,来减轻我的内存负担。

技术选型之路

为了达到内存减负目的,我对比了很多个后端技术,对比的维度有:上手难度、生态丰富度、在工作中的使用度、对内存消耗等几个方面;调研的技术有:Python、Nodejs、Golang,俗话说没有最好的只有最合适的。经过对比最终选择了Nodejs作为新的后端开发语言来进行重写。

最终选择Nodejs的原因有以下几点:

1. 使用Nodejs编程,最终使用的是JavaScript脚本语言,虽然我本职不是前端开发,但工作中经常在使用JavaScript,可以说是我的第二编程语言,上手起来难度最小,几乎拿来即用。

2. Nodejs有一个最大的优点就是单线程和非阻塞IO可以处理大量并发请求。我的这几个网站基本都IO密集型网站,Nodejs的优点完全可以得到最大发挥。

3. Nodejs生态相对非常完善,基于庞大的npm生态,开发起来更加高效。

4. Express Web服务开发框架,使得开发web应用更加得心应手。

5. 最主要的是Nodejs占用内存真的少,对比之后,实现相同的功能只需要90MB左右的内存,跟Java的600MB相比,看着大大的欣喜。

Nodejs后端开发技术学习

简单说只需要JavaScript基础就可以进行开发了,但是工欲善其事必先利其器,完全使用原生JS开发效率肯定大打折扣。为此花了一天多的时间学习了以下几个技术:

1. TypeScript:原因是因为JavaScript是弱类型的脚本语言,字段类型太过灵活,是把双刃剑。作为Java出身的程序猿还是比较容易接受静态类型和面向对象的编程方式。而TypeScript作为JS的超集,完全兼容了JS的语法,又进化出了面向对象、静态类型等高级特性,Java Boy看了喜上心头。主要学了相关语法,其实跟Java还是比较像的,用起来也比较亲切。

2. Express web开发框架:相当于Java中的SpringBoot,将web开发难度降到了极致,开发效率得到了成倍的提升。这个框架主要是看了如何使用的和请求中的各种类型参数如何获取、处理。

3. Sequelize:数据库ORM框架,用来提升数据库交互开发效率,相当于Java中的Hibernate、Mybatis。这个框架基本不用学,只需要看下如何连接数据库、字段映射,其它的单表查询语法只需要了解即可,具体用的时候知道有相对应的的东西,不知道如何用直接查官方文档即可。直接使用sql进行的基本查询更不在话下。

4. Redis-connect:redis相关操作类库。主要看了如何连接redis,具体操作跟Java基本一致。

5. PM2:PM2 是一个守护进程管理工具,帮助您管理和守护您的应用程序。由于Nodejs是单进程、单线程的,导致的严重后果就是如果程序运行过程中有异常处理不当,整个程序直接就挂掉无法提供服务了。使用PM2的原因就是它可以守护这个Nodejs进程,当发现进程出现异常后,可以自动重启,不至于直接宕机。

重写之旅

相关技术进行了储备之后,就要开始项目的重写了。重写工程不会是一蹴而就,先选了一个功能点相对少的“万巷”进行重写。

这里的重写也可以说是翻译,将Java语言翻译成TS语言。翻译是有窍门的,放到前几年估计没有好办法,只能一个个代码自己手敲。但今非昔比,在这个“无AI,不创业”的年代,翻译的工作就相对轻松了许多。直接对着AI这么说:

可以看出,这个接口的Controller基本就翻译过来了,当然具体的实现逻辑还需要再做调整,如果一个Controller有十几二十个接口,AI这么一帮忙,省了大把的时间。

AI对数据库实体类的翻译更是高效,来看一个例子:

翻译结果并没有达到预期,因为如果字段上没有@Column字段,ORM框架查出来的数据是不能映射到实体类中的。我们可以调整一下提示词:

提示词经过这么修改之后,AI生成的代码基本就是可用的了,即使还有需要调整的部分,也是微调即可了。如果数据库有几十张表,靠手码代码来翻译这些实体类,估计内心是非常绝望的。

剩下的就是具体逻辑的实现了,也是可以让AI来辅助进行翻译的,如果效果差不多,仅需要微调就行了;如果效果相差甚远,就需要自己来手动翻译了。

总结

1. 编程思想是互通的。虽然编程语言语法、实现形式、技术路线各有千秋,但是编程的思想是相通的。学通了一种编程语言,其它语言很多能触类旁通,比如你是一个技术还可以的java boy,当你去阅读其它编程语言的代码,可能看着语法很奇怪,但是有些逻辑还是能捋出来的,即使让你用那种语言写不出来。

2. 技术没有优劣,只有合不合适。技术实现千千万万,但在不同领域、不同业务中各有优劣。很流行的一句话“PHP是最好的语言”,很调侃的一句话,但也说明了PHP有那么一段时期对彼时的多数业务是适用的。但正所谓时势造英雄,近年来的人工智能领域python正大范围落地、云原生领域Go正大行其道。技术选型不能迷信,合适的就是最好的。

3. 拥抱AI。不同于元宇宙、区块链当初被吹得神乎其神,最终一切沉寂于海底,AI正在切切实实影响和改变着我们每个人的生活,未来会有更多生活场景接入AI。元宇宙和区块链热度低了很多,但并不是它们技术上不行,只是离普通人太远了。而AI则不同,它已经深深嵌入我们日常生活中,你有意、无意能感受到的。

身处IT界,有一句看似“谣言”的话:人工智能越来越智能之后,以后就没有程序员这个行业了。个人感受,如果真的因为人工智能导致程序都由机器来生产,可能到那时也就不需要人类这个物种了。但未来谁又能说得准呢?当ChatGPT凌空出世时,多少人被惊叹出了“哇”,我是其中一个,第一次用的时候真的很震惊,但在ChatGPT发布的前一天,又有几个人会知道明天会出现这么一个惊艳的东西。

相关推荐

【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...

Pure Storage推出统一数据管理云平台及新闪存阵列

PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...

对Java学习的10条建议(对java课程的建议)

不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...

SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!

官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...

JDK21有没有什么稳定、简单又强势的特性?

佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...

「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了

在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...

Java面试题及答案最全总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

数据库日常运维工作内容(数据库日常运维 工作内容)

#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...

分布式之系统底层原理(上)(底层分布式技术)

作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...

oracle 死锁了怎么办?kill 进程 直接上干货

1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

取消回复欢迎 发表评论: