一、背景
今天一个朋友问了一个问题,测试环境比线上的代码多了几行代码怎么办?
是不是要新建分支?有没有更好的办法?
比如测试环境和线上环境用了同一套NoSQL存储,想隔离两个环境怎么办?
下面提供一个比较通用的方案,希望对大家有帮助。
二、方法
我们可以写一个环境工具类,然后再特定环境的代码上用这个工具类进行判断。
@Component
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() {
if (environmentHelper.isQa()) {
// 测试环境专用代码
}
// 其他代码
}
}当然了也可以借助Apollo来配置,比如设置一个变量表示是否开启某个功能,线上的Apollo和测试服的配置不同。
如果预发和线上服公用同一套缓存框架,通过环境工具类获取环境的名称和key组合成一个新的key字符串,即可实现环境的隔离。
三、总结
方法不难,在开发中偶尔也会用到。
另外建议大家多看Spring的官方文档,很多场景都有专门的类提供了相关的功能,而不是遇到一个问题一个问题去查,去问。
點擊查看更多內容
1人點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦