从外包到甲方:一个老广Java仔的开发环境配置血泪史

灰度发布员
2026-01-13 04:22
阅读 1445

大家好,我是阿强,一个在广州老城区土生土长的程序员。去年十月,我终于从干了三年外包的“乙方狗”跳进了甲方怀抱——现在在一家本地电商公司做后端开发,月薪从15k涨到了22k(税前哈,别羡慕,广州房租3500,老婆还在看学区房)。今天不聊跳槽技巧,也不吹技术架构,就想和大家唠唠一个看似基础、却让我栽过无数跟头的话题:开发环境配置

别笑!我知道很多人觉得:“这有啥好写的?装个JDK、配个Maven、IDEA点几下不就完事了?”
但相信我,作为一个从“运营提需求比我妈催婚还急”的外包公司杀出来的Java仔,我太懂环境配置这四个字背后藏着多少血与泪了。


那个被前端同事追着骂的下午

时间回到今年3月的一个周五下午,阳光正好,珠江边的木棉花开得正艳。我刚泡好一壶普洱(老广的倔强),准备优雅地摸鱼到下班。突然,钉钉“叮”一声炸响:

前端小林:阿强!你本地跑起来了吗?我这边接口调不通啊!
:等下,我刚拉了新分支,正在配环境……
小林(秒回):不是吧?上周五不是说好了今天联调吗?运营那边催得要死,说今晚8点必须上线!

我手一抖,茶差点洒键盘上。

事情是这样的:我们有个促销活动页面,后端是我负责,前端是小林。代码其实早就写完了,但每次联调都出问题——不是我本地数据库连不上,就是Redis版本不对,要么就是Nginx配置漏了跨域。最离谱的一次,我本地跑的是Java 11,测试服是Java 8,结果一个Optional用法直接崩了。

那天下午,我一边手忙脚乱地改application-dev.yml,一边听着小林在工位那头叹气:“又来了……你们后端能不能把环境搞稳一点?”

那一刻,我真的想钻进服务器机柜里躲起来。


外包三年,我配了三年“祖传环境”

其实这种尴尬,在我做外包时更是家常便饭。

还记得2021年夏天,我在天河某写字楼给一家金融客户做外包。项目交接那天,前任开发只留了一句话:“环境配置文档在Confluence,自己看。”
结果点进去一看——最后更新时间:2019年6月。

我照着文档一步步来:

  • JDK 8?装了。
  • Maven 3.6.3?OK。
  • MySQL 5.7?没问题。
  • 启动!Boom!报错:ClassNotFoundException: com.mysql.cj.jdbc.Driver

我懵了。翻遍Stack Overflow,最后发现:人家用的是MySQL 8.0,驱动类名变了!但文档没写。更坑的是,他们的测试库密码是Admin@123!,但生产库密码规则是“大小写+数字+特殊字符+生日”,而前任离职前根本没交接密码……

那周我每天加班到凌晨,不是在配环境,就是在配环境的路上。老婆打电话问我:“今晚回来吃饭吗?”
我说:“不了,还在和MySQL搏斗。”
她叹了口气:“你跟电脑过算了。”

外包的本质是什么?是“人肉运维+临时工编码”。 客户不管你怎么配环境,只要功能能跑就行。久而久之,我也养成了“能跑就行”的坏习惯——本地改个端口、临时加个host、手动建个表……反正下周可能就换项目了,谁管你环境干不干净?


进了甲方,我才明白:环境即契约

跳槽到现在的公司后,第一周我就被震撼了。

入职第一天,导师老陈(一个戴黑框眼镜的潮汕大哥)递给我一个U盘:“这是我们的标准化开发镜像,VirtualBox导入就行。里面有预装好的JDK、Maven、Docker、MySQL、Redis、Nginx,连IDEA主题都配好了。”

我半信半疑地导入,启动虚拟机——
docker-compose up 一键拉起所有依赖服务;
./start.sh 直接跑起Spring Boot应用;
连前端的Mock Server都集成好了!

我惊呆了:“这……这也太爽了吧?”

老陈笑了笑:“在甲方,开发环境不是你一个人的事,是整个团队的契约。前端要能随时调你的接口,测试要能复现bug,运营要看数据——如果每个人本地环境都不一样,协作效率直接归零。”

那一刻,我突然明白了为什么之前联调总是翻车。不是代码有问题,是“环境”这个看不见的层,早就烂掉了。


我开始认真对待每一行配置

从那以后,我彻底改变了对开发环境的态度。我把自己的MacBook重新格式化,从零开始搭建“洁癖级”环境:

  1. JDK用SDKMAN!管理,不同项目自动切换版本;
  2. Maven settings.xml统一托管到GitLab私有仓库,团队共享;
  3. 数据库用Docker容器化,每次启动都是干净实例;
  4. Hosts文件用SwitchHosts!管理,不同环境一键切换;
  5. 前端Mock用YApi + Rap2,接口定义先行,避免“我以为你那里有这个字段”。

最关键是——所有配置都写进README.md,提交到代码库根目录。格式如下:

## 本地开发环境配置

### 前置依赖
- JDK 17 (通过 SDKMAN! 安装)
- Maven 3.8.6
- Docker & Docker Compose

### 启动步骤
1. `git clone xxx`
2. `docker-compose -f docker/dev-services.yml up -d`  # 启动MySQL/Redis
3. `mvn clean install -DskipTests`
4. `./scripts/run-local.sh`

### 联调说明
- 前端访问地址:http://localhost:8080/api
- Mock数据开关:application-dev.yml 中 mock.enabled=true
- 运营后台账号:admin / 123456(仅本地有效)

上周五,又是和小林联调。
我发他一个链接:“你直接调这个,我本地已经跑起来了。”
他试了一下,秒回:“通了!牛啊强哥!”

我喝了一口茶,心里美滋滋——原来被前端夸,比被HR涨薪还爽。


技术分享:环境配置不是“脏活”,而是“基建”

现在,我甚至主动在公司内部搞了一场技术分享,主题就叫《让开发环境不再成为协作瓶颈》。PPT第一页我就写了:

“你以为你在配环境,其实你在建立信任。”

我分享了三个核心原则:

1. 可复现性 > 便利性

宁可多花10分钟写脚本,也不要手动点十次鼠标。因为三个月后,你会忘记自己做过什么。

2. 文档即代码

环境配置文档必须和代码一起版本控制。Confluence可以写概述,但具体命令、配置文件必须在Git里。

3. 为前端和运营考虑

前端需要知道接口地址、Mock方式;运营需要知道本地如何查看报表。开发环境不是后端的自留地,而是全链路的起点。

分享结束后,运营小姐姐跑过来问我:“强哥,以后我们提需求,是不是不用再等你们‘先配好环境’了?”
我笑着说:“放心,下次你们的需求评审会,我的环境已经在跑demo了。”


写在最后:环境稳了,心才定

从外包到甲方,我最大的感悟不是技术栈升级,而是思维方式的转变

以前我觉得:“环境配不好?重启一下,或者换个人配。”
现在我知道:“环境配不好?说明流程有漏洞,协作有断层。”

开发环境配置,表面看是技术活,底层其实是协作哲学。它决定了你是“单打独斗的码农”,还是“可信赖的团队成员”。

如果你也在经历联调地狱、环境玄学、文档失踪……不妨停下来,花一天时间,把自己的开发环境“工业化”一次。你会发现,省下的不仅是时间,更是团队的信任成本

对了,昨天老婆又问我:“最近加班少了很多?”
我说:“嗯,因为我不用再和环境打架了。”
她点点头:“那周末带我去喝早茶?”
“好啊,”我笑着说,“不过得先配好‘家庭环境’——记得叫妈一起来。”


后记:本文纯文字无图(按要求),但建议大家真的去画一张“本地服务拓扑图”贴在显示器旁边——当你看到MySQL、Redis、Nginx、前端Mock Server整整齐齐连成一片,那种秩序感,比喝十杯冰镇酸梅汤还解暑。

共勉。
—— 一个终于把环境配明白的老广Java仔

评论 0

最热最新
暂无评论
灰度发布员Lv.1
0
影响力
0
文章
0
粉丝