前言

公司改名了对技术上有哪些影响?就问你一句:好奇不?

假如公司改名了,只是单纯的改名字。

  1. 团队人员没变
  2. 使用的技术栈也没变

如果站在开发人员的角度,会给我们带来哪些影响呢?

本次修改涉及到的主要内容如下:

  1. 公司名称:公司A改成公司B。
  2. 域名:a.xx.com改成b.xx.com
  3. logo:红色logo改成蓝色
  4. 模板文件:模板文件中公司名称和域名需要相应修改,特别是一些合同文件和excel文件中。

1 配置文件

如果公司名称或域名有修改,大家可能第一个想到的可能是去改配置文件。

1.1 关键字替换

对于公司名称和域名的修改,只需把apollo的配置复制出来,全文替换一下,然后复制进去保存,一键发布即可。

1.2 公共配置

有些人可能觉得公司名称,在项目中不一定用得到。但是域名我想很多项目都在用,比如需要调用oss或obs服务上传文件时,一般需要配置一个域名。

如果只是一个项目还好,但如果有十几个、几十个、甚至上百个项目,都使用了域名,难道要每个项目都改一遍?

显然像公司名称和域名这种公共配置,应该放在类似于parent的配置中,而在业务项目中只需通过namespace引入parent即可。

后面如果公共配置变了,只用改一个地方,更方便管理和维护。

app.id=susan-api
apollo.meta=http://apollo-susan.com:8082,http://apollo-susan-2.com:8082
apollo.cluster=default
apollo.bootstrap.namespaces=application,common,eureka.client,datasource,redis,rocketmq
apollo.bootstrap.enabled = true
apollo.bootstrap.eagerLoad.enabled = true

提取公共配置,看起来非常简单。但是真正执行起来却一点都不容易,不是说提取一次就完事了,它是一个持续不断的过程。考验的不仅仅是技术层面的,更多的是管理上的东西。

1.3 接口地址

很多时候,在我们在调用第三方接口时,需要配置接口地址。

这时有些人可能是这样配置的:

#注册接口
com.susan.registerUrl=https://www.susan.com:8080/api/register

#登录接口
com.susan.loginUrl=https://www.susan.com:8080/api/login

...

在接口地址中配置了完整路径,包含:协议、域名、端口号和具体接口名称。

如果哪一天,协议或域名或端口号改了,就需要修改很多地方。

如果项目中配置了多个第三方接口地址,建议将协议、域名和端口号单独做成一个公共的配置,例如:

com.susan.baseUrl=https://www.susan.com:8080

com.susan.registerUrl=${com.susan.baseUrl}/api/register
com.susan.loginUrl=${com.susan.baseUrl}/api/login

然后在具体接口配置中通过$符号引用这个公共配置。

这样做的好处是方便维护,后面如果协议、域名和端口号任意一个有修改,只需修改那个公共配置即可。

2 数据库

除了配置文件之外,另外一个需要重点关注的是数据库。

2.1 域名保存到数据了

有些小伙伴在保存数据时为了方便,直接将域名保存到了数据库中。

最常见的情况是附件url,比如:https://susan.oss.com/file/123123123123.png,直接保存到了数据库中。

这就需要把所有的域名,替换成新的。

第一步是要去找出哪些数据库的哪些表的哪些字段中包含了域名。

找起来非常麻烦。

如果找到了哪些具体的数据库、表和字段,接下来使用replace函数,就能实现域名的替换了,例如:

update test.t_user set url = replace(url,'susan.oss.com','susan.oss.cn'); 

2.2 json字段

MySQL5.7以后支持json格式的数据。

有时候,为了数据的扩展性,我们可能会把请求参数的json数据整个都保存下来,比如商城的基础配置等。

但如果json数据中包含了域名。

找起来就更麻烦了。

如果你知道是哪些数据库的哪些表的哪些字段中包含了域名,其实也可以用replace函数,MySQL也是支持的。

虽说我们可以通过一些办法去修改数据库保存的域名,但是在数据库中保存域名并不是一种好的设计。

建议涉及到公共域名的数据库字段,不要保存绝对地址,比如:https://susan.oss.com/file/123123123123.png,而应该保存相对地址,比如:/file/123123123123.png

3.缓存

缓存在实际项目中使用还是挺多的,缓存中也可能会保存域名。

那么,如何找出缓存中包含了域名的数据,替换成另外一个域名呢?

redis是基于key/value的非关系型数据库,没法使用like之类的关键字去查询数据。

想找到需要替换的数据很显然,这是一个让人非常头疼的问题。

我们不妨换一种思路:缓存是数据库的补充,缓存中的数据,数据库中肯定有。那么,我们把缓存删了,通过数据库重新生成一份最新的数据,不就OK了?

通常情况下,有两种方式生成缓存:

  1. 事先预热数据。
  2. 调用接口时更新。

3.1 事先预热数据

比如在商城中分类树的数据,就可以通过事先预热的方式生成缓存的数据。

其实这种场景,可以不用删除缓存数据,如果数据库中的域名修改了,使用job重新生成一次缓存覆盖已有数据即可。

3.2 调用接口时更新

很多缓存是这样用的:先从缓存中查询数据,如果缓存中有,则直接返回该数据。如果缓存中没有,则从数据库中查询数据,如果数据库中有,则将数据放到缓存中,返回数据。如果数据库中也没有,则直接返回空数据。

这种情况如果将缓存删除,万一用户并发量上来了,可能会出现缓存雪崩的问题。

我们可以对key重新设置过期时间,过期时间为最近半个小时内的一个随机数,避免一次性全部过期的情况发生。

3.3 如何删除缓存?

如果有些场景,用户并发量不大,可以用户的所有请求,可以直接访问数据库。

就可以直接删除缓存了。

那么如何删除缓存的?

  1. flushall:清空整个redis服务器的数据(删除所有数据库的所有key )。
  2. flushdb:清空当前数据库中的所有key。

如果想删除指定前缀的key,可以这样:

redis-cli --raw keys "su-*" | xargs redis-cli del

由于Redis是单线程的,命令keys会阻塞正常的业务请求,如果你一次keys匹配的数量过多或者在del的时候遇到大key,都会直接导致业务的不可用,甚至造成redis宕机的风险。

那么如何解决这个问题呢?

答:Redis从2.8版本开始支持scan命令。

redis-cli --scan --pattern "su-*" | xargs -L 2000 redis-cli del

其实还有ElasticSearch也可能会有保存域名的情况,如果全部替换数据的话,成本非常大。

我们在做系统设计的时候,针对ElasticSearch的相关数据,可以提供全量的job,防止数据出现异常时,能够快速的重新生成数据。

4.代码

如果公司改名了,并且域名也修改了,其实对代码也有一些影响。

4.1 包名使用了域名

不知道你注意到了没?在我们的项目中,经常会使用域名作为包的路径,比如:org.apache.common

如果域名修改了,是不是包名称也需要相应的修改?

如果公司的项目比较少的话,我们可以改一下包名称。

但如果涉及的项目非常多,改起来会非常麻烦。

特别是我们有些项目提供的jar包,被第三方公司引用了,这种改动太大了。

因此,不太建议随便修改包名,特别是提供了jar包给外部依赖的情况下。

4.2 类名包含公司名

有些小伙伴在起类名时,可能会使用公司名称,比如:XXXConfig。

如果该类没有被第三方使用,建议还是改一下,改起来还是比较容易的。

5.其他

除此之外,还有一些额外的信息需要调整一下。

5.1 资源文件

公司改成了,logo和模板文件中的公司名称需要调整。

我们有些logo或者excel模板文件,有些人喜欢将他们放在项目的resources目录下。这种方式直接从本地获取,访问速度快。

也有些人喜欢将他们上传到oss服务器上,通过url地址访问。这种方式方便维护,特别是后面要更新的话,只需重新上传文件,配置一下url地址即可。

如果你们的公司有oss服务的话,我个人更倾向于用第二种。

5.2 导航

公司改成了官网首页的导航菜单,可能也会随着一起调整。

导航菜单建议做成apollo配置,通过一个config接口获取相关数据。

5.3 官网颜色

公司改名了,有可能连官网的颜色也会一起修改,比如之前是红色主题的,现在改成蓝色主题的。

所以建议在开发官网时,将主题颜色不要写死了,而应该做成动态可配置的。前端通过调用服务器的config接口,可以获取官网的主题颜色编码。

最后留个问题,如果Mongodb中包含了域名需要修改,该如何处理?

最后修改:2026 年 06 月 05 日
如果觉得我的文章对你有用,请随意赞赏