前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试环境比线上的代码多了几行代码怎么处理?

测试环境比线上的代码多了几行代码怎么处理?

作者头像
明明如月学长
发布2021-08-31 14:39:15
2980
发布2021-08-31 14:39:15
举报
文章被收录于专栏:明明如月的技术专栏

一、背景

今天一个朋友问了一个问题,测试环境比线上的代码多了几行代码怎么办?

是不是要新建分支?有没有更好的办法?

其实还有类似的场景,比如测试环境和线上环境用了同一套NoSQL存储,想隔离两个环境。

下面提供一个比较简单的通用的方案,希望对大家有帮助。

二、方法

我们可以写一个环境工具类,然后再特定环境的代码上用这个工具类进行判断。

代码语言:javascript
复制
public class EnvironmentHelper implements EnvironmentAware {

    private Environment environment;
    private static final String PROD = "prod";
    private static final String PRE = "pre";
    private static final String QA = "qa";

    public boolean isProd() {
        return environment.acceptsProfiles(PROD);
    }

    public boolean isPre() {
        return environment.acceptsProfiles(PRE);
    }

    public boolean isQa() {
        return environment.acceptsProfiles(QA);
    }

    public String[] getActiveProfiles() {
        return environment.getActiveProfiles();
    }

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

}

当然也可以直接注入

代码语言:javascript
复制
@Component

public class EnvironmentHelper{

    @Autowired
    private Environment environment;

    private static final String PROD = "prod";

    private static final String PRE = "pre";

    private static final String QA = "qa";

    public boolean isProd() {
        return environment.acceptsProfiles(PROD)
    }

    public boolean isPre() {
        return environment.acceptsProfiles(PRE);

    }

    public boolean isQa() {
        return environment.acceptsProfiles(QA);
    }

    public String[] getActiveProfiles() {
        return environment.getActiveProfiles();
    }

}

然后借助工具类来判断环境

代码语言:javascript
复制
@Service

public class DemoServiceImpl implements DemoService {

    @Resource
    private EnvironmentHelper environmentHelper;

    @Override
    public void test() {
       // 其他代码1
        if (environmentHelper.isQa()) {

            // 测试环境专用代码

        }

        // 其他代码2
    }
}

当然了也可以借助Apollo来配置,比如设置一个变量表示是否开启某个功能,线上的Apollo和测试服的配置不同。

如果预发和线上服公用同一套缓存框架,通过环境工具类获取环境的名称和key组合成一个新的key字符串,即可实现环境的隔离。

三、总结

方法不难,在开发中偶尔也会用到。

另外建议大家多看Spring的官方文档,很多场景都有专门的类提供了相关的功能,而不是遇到一个问题一个问题去查,去问。

创作不易,如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、方法
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档