天天看點

測試環境比線上的代碼多了幾行代碼怎麼處理?

一、背景

今天一個朋友問了一個問題,測試環境比線上的代碼多了幾行代碼怎麼辦?

是不是要建立分支?有沒有更好的辦法?

其實還有類似的場景,比如測試環境和線上環境用了同一套NoSQL存儲,想隔離兩個環境。

下面提供一個比較簡單的通用的方案,希望對大家有幫助。

二、方法

我們可以寫一個環境工具類,然後再特定環境的代碼上用這個工具類進行判斷。

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;
    }
}      
測試環境比線上的代碼多了幾行代碼怎麼處理?

當然也可以直接注入

@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();
    }
}      
測試環境比線上的代碼多了幾行代碼怎麼處理?

然後借助工具類來判斷環境

@Service
public class DemoServiceImpl implements DemoService {
    @Resource
    private EnvironmentHelper environmentHelper;
    @Override
    public void test() {
       // 其他代碼1
        if (environmentHelper.isQa()) {
            // 測試環境專用代碼
        }
        // 其他代碼2
    }
}      
測試環境比線上的代碼多了幾行代碼怎麼處理?

當然了也可以借助Apollo來配置,比如設定一個變量表示是否開啟某個功能,線上的Apollo和測試服的配置不同。

如果預發和線上服公用同一套緩存架構,通過環境工具類擷取環境的名稱和key組合成一個新的key字元串,即可實作環境的隔離。

三、總結

方法不難,在開發中偶爾也會用到。

另外建議大家多看Spring的官方文檔,很多場景都有專門的類提供了相關的功能,而不是遇到一個問題一個問題去查,去問。

創作不易,如果覺得本文對你有幫助,歡迎點贊,歡迎關注我,如果有補充歡迎評論交流,我将努力創作更多更好的文章。